我正在阅读 LinkedList 的 ListIterator 的 Java Doc,它被定义为非静态内部类。为什么不是静态类?这个数据结构不应该在 LinkedList 的所有实例之间共享吗?我很困惑。谢谢。
private class ListItr implements ListIterator<E>{
}
我正在阅读 LinkedList 的 ListIterator 的 Java Doc,它被定义为非静态内部类。为什么不是静态类?这个数据结构不应该在 LinkedList 的所有实例之间共享吗?我很困惑。谢谢。
private class ListItr implements ListIterator<E>{
}
我认为您对 Java 中静态和非静态类与静态和非静态成员之间的区别有一点误解:静态和非静态类之间的区别在于非静态类有一个隐式成员持有引用外部类,而静态类没有这样的隐式引用。两种内部类在所有实例之间共享;它是内部类的实例,它们与其外部类的实例相关联。
这正是您想要的迭代器:每个迭代器都连接到它所迭代的集合的实例,因此通过使内部类非静态来隐式地持有这个引用是非常有意义的。
首先,ListItr
它不是数据结构,它是一个内部类。ListIterator
实例不会自动共享此类的实例,它们不应该!由于内部类ListItr
可以访问其封闭类数据,这对于在数据集合上实现迭代器非常有用。静态类不会有这种访问级别,因此作为迭代器的实现会做出更糟糕的选择。