关于集合中迭代器中next()方法重复使用造成的错误

今天测试ArrayList消除重复字符串功能时候发现的一些小问题,以前被提醒过,一直没重视.遂记下供大家参考.最后输出newArray没有采用迭代,直接输出了,只看结果.

下面代码是单纯使用it.next()方法的代码:

package day16_04_ArrayList;


import java.util.ArrayList;
import java.util.Iterator;


public class ArrayListDemo {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<String>();
array.add("hi");
array.add("OK");
array.add("hi");
array.add("OK");
array.add("hi");
array.add("OK");
array.add("hi");
array.add("OK");
array.add("hi");
array.add("OK");

ArrayList<String> newArray = new ArrayList<String>();
Iterator<String> it = array.iterator();
while(it.hasNext()){
// String s = it.next();
// if (!newArray.contains(s)) {
// newArray.add(s);
if(!newArray.contains(it.next())){
newArray.add(it.next());
}
}
System.out.println(newArray);
}
}

结果:[OK, OK, OK, OK, OK]

这并不是我们想要的结果!!!!


改正后的代码:

package day16_04_ArrayList;


import java.util.ArrayList;
import java.util.Iterator;


public class ArrayListDemo {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<String>();
array.add("hi");
array.add("OK");
array.add("hi");
array.add("OK");
array.add("hi");
array.add("OK");
array.add("hi");
array.add("OK");
array.add("hi");
array.add("OK");

ArrayList<String> newArray = new ArrayList<String>();
Iterator<String> it = array.iterator();
while(it.hasNext()){
String s = it.next();
if (!newArray.contains(s)) {
newArray.add(s);

// if(!newArray.contains(it.next())){
newArray.add(it.next());
}
}
System.out.println(newArray);
}
}

结果为:[hi, OK]

这才是想要的结果!

对于单纯一个集合而言,可以直接用迭代器的next()方法输出,不过不建议,在明知输入数据类型的前提下(用泛型限定),可以转换一下.

package day16_04_ArrayList;


import java.util.ArrayList;
import java.util.Iterator;


public class ArrayListDemo1 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("hi");
list.add("ok");
Iterator it = list.iterator();
for(int i =0;i<list.size();i++){
System.out.println(it.next());
}
  }
}

结果:

hi

OK

//结果代表这么着可以,但是转一下还是好的

package day16_04_ArrayList;


import java.util.ArrayList;
import java.util.Iterator;


public class ArrayListDemo1 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("hi");
list.add("ok");
Iterator it = list.iterator();
for(int i =0;i<list.size();i++){
String s = (String)it.next();
System.out.println(s);
}
  }
}

结果同上!


综上:对于一个以上集合进行关于迭代工作的时候,一定要注意不要多次使用 next()方法,会造成不可预知的错误.


解决方案未找到,哪位大大找到的话麻烦加个评论.谢谢!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值