Iterator:
举例关于链表迭代器嵌套使用:
问两个集合的交集,使用迭代器嵌套实现
使用Set集合的LinkedHashSet实现类进行编写。因为其输出是有序的
Iterator<String> iter = s1.iterator();
Iterator<String> iter1 = s2.iterator();
//示例1:
//错误的
while(iter1.hasNext()){
if(s1.contains(iter1.next())) {
System.out.print(iter1.next() + "\t"); //输出是有序的
}
}
/*解释:因为在if语句中已经存在iter1.next()。所以在syso中输出时iter1.next()相当于又next了一下。
正确的*/
while(iter1.hasNext()){
String str = iter1.next();
if(s1.contains(str)) {
System.out.print(str + "\t"); //输出是有序的
}
}
//示例2:
//错误的
public void intersection(Set<String> s1,Set<String> s2) {
Iterator<String> iter = s1.iterator();
Iterator<String> iter1 = s2.iterator();
while(iter.hasNext()){ //w1
String str1 = iter.next();
while(iter1.hasNext()){ //w2
String str2 = iter1.next();
if(str1.equals(str2)) {
System.out.print(str2 + "\t"); //输出是有序的
}
}
}
}
/*解释:在第一次循环的时候,w1的第一个元素和w2循环的所有元素进行了比较。w1的第二次循环的话就不会进入w2循环。因为在w2循环中 iter1.hasNext() 已经循环完了,返回了fasle。iter1是局部变量,没有在第一次while循环中进行初始化。*/
//正确的
public void intersection(Set<String> s1,Set<String> s2) {
Iterator<String> iter = s1.iterator();
Iterator<String> iter1;
while(iter.hasNext()){
iter1 = s2.iterator();
String str1 = iter.next();
while(iter1.hasNext()){
String str2 = iter1.next();
if(str1.equals(str2)) {
System.out.print(str2 + "\t"); //输出是有序的
}
}
}
}