LinkedList有一个名为Entry的静态类。为什么它是静态的,有什么好处?

时间:2014-07-16 04:16:02

标签: java collections

Linklist具有名为ENTRY的静态类

private static class Entry<E> {
E element;
Entry<E> next;
Entry<E> previous;

Entry(E paramE, Entry<E> paramEntry1, Entry<E> paramEntry2){
  this.element = paramE;
  this.next = paramEntry1;
  this.previous = paramEntry2;
}
}

在LinkList中创建了一个对象

private transient Entry<E> header = new Entry(null, null, null);

以下是我的问题?

  1. 为什么它是静止的?
  2. 如果我们定义两个以上的LinkList,它会共享相同的静态类'Entry'吗?

1 个答案:

答案 0 :(得分:3)

在性能方面,非静态类包含对创建它们的外部类的隐式引用。如果您不需要该引用,则可以通过将内存设置为静态来节省内存。 (参见JLS 8.1.3Inner classes whose declarations do not occur in a static context may freely refer to the instance variables of their enclosing class.此功能需要存储对该类的引用。)

就语义而言,代码的读者更清楚的是,如果将内部类设为静态,则内部类不包含外部类。从这个角度来看,你应该总是将你的内部类声明为静态,直到你需要依赖于封闭类的那一点。

关于你的问题2:我假设你的意思是“如果我们定义了两个以上LinkedList的实例”。它们将共享相同的静态类(即LinkedList.Entry.class对象本身),但当然会包含不同的Entry个实例。