0

我尝试在该站点上进行搜索,但是带有关键字 interator 或 implementation 的线程太多。那么,简而言之,各种标准迭代器实现之间有什么区别?除了 .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

那么,如果需要,为什么不保留接口供人们在自定义类中实现,并在所有集合中都有一个具体的实现呢?

4

1 回答 1

3

不同之处在于用于生成迭代器的类,你不能指望相同的迭代器实现同样适用于例如 HashMap 和 TreeMap。

检查您使用的类的源代码,并查找迭代器实现:

数组列表:http: //grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java

树图: http ://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/TreeMap.java?av= f

摘要列表:http ://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/AbstractList.java?av=f

哈希映射:http ://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashMap.java?av=f

于 2014-06-21T02:36:32.000 回答