Set<Long>内部循环取值错误 如何正确遍历取对应ArrayList值
错误原因
Set是无序不支持下标访问的集合,你用values_set.size()(值为4)作为第二层循环的上限,本质是让j的最大取值为3,用这个下标去访问有10个元素的values列表,得到的结果和values_set的元素范围完全无关- 你混淆了
values的下标和values_set存储的元素值,两层遍历目标都是values_set内的元素时,不能直接用元素值当下标遍历 - 额外语法注意:Java中
ArrayList不能用[]按下标取值,需要调用get()方法
正确实现
场景1:第二层循环遍历values_set中排在当前元素之后的所有元素(用于两两组合等场景)
首先将Set转为有序列表,再通过下标遍历:
// 先把Set转为有序列表,固定元素顺序 List<Long> setList = new ArrayList<>(values_set); for (int i = 0; i < setList.size(); i++) { Long currentVal = setList.get(i); // 第二层从i+1开始,遍历当前元素之后的所有Set内元素 for (int j = i + 1; j < setList.size(); j++) { Long targetVal = setList.get(j); // 如果需要取values中对应下标的值,再调用get方法 Long res = values.get(targetVal.intValue()); } }
场景2:第二层循环取values里下标大于当前元素值、且下标属于values_set的元素
直接遍历values_set做值筛选即可:
for (Long currentVal : values_set) { int currentId = currentVal.intValue(); for (Long targetVal : values_set) { // 筛选出大于当前值的元素 if (targetVal > currentId) { Long res = values.get(targetVal.intValue()); } } }
内容的提问来源于stack exchange,提问作者Carles Sastre Pérez
相关产品推荐
相关产品推荐

