gpt4 book ai didi

java - 对给定集合对象执行迭代时迭代器的意外输出

转载 作者:行者123 更新时间:2023-11-29 08:20:44 25 4
gpt4 key购买 nike

不应该是下面代码 012345678 的输出吗?当我运行它时,输出是 02468。你能帮我理解一下吗?

    import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class CollectionArray {

public static void main(String[] args) {

List<Integer> num = new ArrayList();
for (int i=0; i<10; i++) {
num.add(i);

}
//System.out.println(num);

int int1=9;
Integer in = new Integer(int1);

Iterator itr = num.iterator();
while(itr.hasNext()) {
System.out.println(itr.next());
if(itr.next()== in) {
itr.remove();
}
}

}

最佳答案

你的代码有几个错误,我会在下面列出所有错误

  1. 您正在使用 itr.next() 跳过元素打印期间System.out.println(itr.next());
  2. 您正在创建新的 Integer具有值的对象 9并比较它们的引用而不是值,它返回 false

例如:下面i1i2是两个Integer具有相同值的对象,但它们是指向不同引用的两个不同对象。所以 ==运算符(operator)返回 false

Integer i1 = new Integer(10);
Integer i2 = new Integer(10);

System.out.println(i1==i2); //false
  1. 所以你可以简单地使用equal比较 Integers 中的值对象并仅在不是 equal 时打印值至 9通过使用 else阻止

代码:

   int int1=9;
Integer in = new Integer(int1); //don't use like this, it is deprecated and no need of it

Iterator<Integer> itr = num.iterator();
while(itr.hasNext()) {
Integer res = itr.next();
if(res.equal(in)) {
itr.remove();
}else {
System.out.println(res);
}
}
  1. 但你不需要创建Integer对象,你可以简单地使用 equals java在哪里auto boxing为您和您提供通用类型对象,如 Iterator<Integer>List<Integer> num = new ArrayList<>();

代码:

Iterator<Integer> itr = num.iterator();
while(itr.hasNext()) {
Integer res = itr.next();
if(res.equals(int1)) { // or == operator will work for primitive int types
itr.remove();
}else {
System.out.println(res);
}
}

关于java - 对给定集合对象执行迭代时迭代器的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58842072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com