如何在Java中初始化Set?

Mic*_*cer 4 java collections initialization set

这可以...

public class someClass {
   private Set<Element> pre;

   public void someMethod() {
      pre.add(new Element());
   }
}
Run Code Online (Sandbox Code Playgroud)

但这不是......

public class someClass {

    public void someMethod() {
       Set<Element> pre;
       pre.add(new Element());
    }
}
Run Code Online (Sandbox Code Playgroud)

什么是后一种情况的正确语法而不仅仅是把它变成前者?

Era*_*ran 10

在这两种情况下,你都缺少初始化Set,但在第一种情况下它null默认初始化为,所以代码将编译,但是NullPointerException当你尝试添加一些东西时会抛出Set.在第二种情况下,代码甚至不会编译,因为在访问之前必须为局部变量分配一个值.

你应该修复这两个例子

private Set<Element> pre = new HashSet<Element>();
Run Code Online (Sandbox Code Playgroud)

Set<Element> pre = new HashSet<Element>();
Run Code Online (Sandbox Code Playgroud)

当然,在第二个例子中,Set是本地的someMethod(),所以这段代码没有意义(你创建的是一个Set你从未使用的本地).

HashSetSet你可以使用的一个实现.还有其他人.如果您事先知道要添加到的不同元素的数量Set,您可以在构造时指定该数字Set.它会提高Set性能,因为它不需要重新调整大小.

private Set<Element> pre = new HashSet<Element>(someInitialSize);
Run Code Online (Sandbox Code Playgroud)