声明与null检查时的Java集合初始化

时间:2013-11-12 18:47:45

标签: java performance collections

初始化Java集合是否有任何主要缺点,例如声明时的ArrayList如:

List<String> strList = new ArrayList<String>();

主要目的是避免在检索元素时出现空值检查的混乱。

由于

3 个答案:

答案 0 :(得分:3)

一般来说,唯一的缺点是你最终可能会收集大量的集合,并且不必要地完成创建集合的工作。

我个人的偏好是始终分配有效的集合,除非有明确的理由避免内存和初始化开销,例如在循环内和其他可能的性能考虑因素。如果我总是确保将对象初始化为非null,那么 不会 ,然后在使用集合之前进行冗余的空检查。

我要添加的注意事项是确保您是否使用了使用它的集合,而不是在以后的代码中将其替换为全新的集合(这表示可能的设计缺陷)。要强制执行此操作,您可以将集合声明为final。

答案 1 :(得分:1)

这取决于用例:

  • 方法正文声明 - 永远都可以。
  • 静态字段声明 - 应始终没问题。
  • 字段声明。有两种常见的情况 - 当您始终需要初始化或可能是null时。在第一种情况下,我使它final并且更喜欢在构造函数中初始化。如果它可能是null,我会添加一个懒惰的getter并使用@Nullable注释它,如下所示:
@Nullable
List<String> strList;

...

public final List getList(){
    if(strList == null){
        strList = new ArrayList();
    }
    return strList;
}

这种技术可以帮助我消除场状态的模糊性。

答案 2 :(得分:0)

您几乎应该立即初始化。仅仅因为它的初始化并不意味着你不应该再进行空检查。创建对象和if检查对性能几乎没有影响。仅当您创建必须从其他集合或数组复制对象的列表时