我尝试在网站上搜索,但是有太多线程与关键字interator或实现。那么,在一个坚果shell中,各种标准迭代器实现之间有什么区别?除了.getClass()返回不同的字符串之外,我没有注意到任何不同的东西。
List myList = (List) Arrays.asList("a", "b", "c", "d");
Set hashSet = new HashSet<String>();
Set treeSet = new TreeSet<String>();
ArrayList arrayList = new ArrayList<String>();
System.out.println(arrayList.iterator().getClass());//ArrayList
System.out.println(hashSet.iterator().getClass());//HashSet
System.out.println(myList.iterator().getClass());//List produced by Arrays.asList()
System.out.println(treeSet.iterator().getClass());//TreeSet
结果如下:
class java.util.ArrayList$Itr
class java.util.HashMap$KeyIterator
class java.util.AbstractList$Itr
class java.util.TreeMap$KeyIterator
那么,为什么不保留人们在需要时在自定义类中实现的接口,并在所有集合中有一个具体的实现?
答案 0 :(得分:3)
不同之处在于用于生成迭代器的类,您不能期望相同的迭代器实现同样适用于HashMap和TreeMap。
检查您使用的类的源代码,并查找迭代器实现:
AbstractList:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/AbstractList.java?av=f