获取ArrayList索引值存入另一个ArrayList结果不符预期,求解答
问题排查与修正
错误原因
你代码里的a.indexOf(i)逻辑完全错了——这个方法是在列表a里找数值等于i的元素的索引,不是拿当前循环的索引值。
- 当i=0时,a里没有0,所以返回-1;
- 当i=1时,a里的1在索引2的位置,返回2;
- 当i=2时,a里的2在索引0的位置,返回0;
这就是你得到[-1,2,0]的原因。
修正方案
要把循环的索引编号本身加到b里,直接添加循环变量i就行:
List<Integer> a = new ArrayList<>(); a.add(2); a.add(5); a.add(1); List<Integer> b = new ArrayList<>(); for (int i = 0; i < a.size(); i++) { // 直接添加当前索引i,而不是调用indexOf b.add(i); } System.out.println("array b: " + b);
如果想用更简洁的方式,也可以用Java 8+的流:
List<Integer> b = IntStream.range(0, a.size()) .boxed() .collect(Collectors.toList());
运行修正后的代码,就能得到预期的[0,1,2]。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

