如何在Java中初始化Set?

时间:2014-10-08 05:22:53

标签: java collections initialization set

这很好......

public class someClass {
   private Set<Element> pre;

   public void someMethod() {
      pre.add(new Element());
   }
}

但这不是......

public class someClass {

    public void someMethod() {
       Set<Element> pre;
       pre.add(new Element());
    }
}

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

1 个答案:

答案 0 :(得分:10)

在这两种情况下,您都缺少Set的初始化,但在第一种情况下,它默认初始化为null,因此代码将编译,但会抛出NullPointerException当您尝试向Set添加内容时。在第二种情况下,代码甚至不会编译,因为在访问之前必须为局部变量赋值。

您应该将两个示例都修复为

private Set<Element> pre = new HashSet<Element>();

Set<Element> pre = new HashSet<Element>();

当然,在第二个示例中,SetsomeMethod()的本地,因此此代码中没有任何意义(您正在创建一个您从未使用过的本地Set

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

private Set<Element> pre = new HashSet<Element>(someInitialSize);