【问题标题】:How do I initialize a Set in Java? [duplicate]如何在 Java 中初始化 Set? [复制]
【发布时间】:2014-10-08 05:22:52
【问题描述】:

这很好......

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());
    }
}

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

【问题讨论】:

  • 两者都不是。一个只会在以后失败。
  • 您需要将Set 构造中的参数传递为private Set&lt;Element&gt; pre = new HashSet&lt;Element&gt;(elementObject);

标签: java collections initialization set


【解决方案1】:

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

你应该把这两个例子都改成

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);

【讨论】:

  • "HashSet 无法解析为类型"
  • @Micromancer 你应该导入它 - import java.util.HashSet;
猜你喜欢
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
相关资源
最近更新 更多