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你从未使用的本地).
HashSet是Set你可以使用的一个实现.还有其他人.如果您事先知道要添加到的不同元素的数量Set,您可以在构造时指定该数字Set.它会提高Set性能,因为它不需要重新调整大小.
private Set<Element> pre = new HashSet<Element>(someInitialSize);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29504 次 |
| 最近记录: |