今天测试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()方法,会造成不可预知的错误.
解决方案未找到,哪位大大找到的话麻烦加个评论.谢谢!