Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
声明与空检查时的Java集合初始化_Java_Performance_Collections - Fatal编程技术网

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

声明与空检查时的Java集合初始化,java,performance,collections,Java,Performance,Collections,初始化Java集合(例如,在声明时初始化ArrayList)是否有任何主要缺点,例如: List<String> strList = new ArrayList<String>(); List strList=new ArrayList(); 主要目的是在检索元素时避免空检查的混乱 谢谢一般来说,唯一的缺点是你最终可能会发现一大堆收藏什么都不做,并且不必要地做了创建收藏的工作 我个人的偏好是总是分配一个有效的集合,除非有明确的理由避免内存和初始化开销,例如循环内和其他

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

List<String> strList = new ArrayList<String>();
List strList=new ArrayList();
主要目的是在检索元素时避免空检查的混乱


谢谢一般来说,唯一的缺点是你最终可能会发现一大堆收藏什么都不做,并且不必要地做了创建收藏的工作

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


我要补充的警告是,如果您确实使用了该集合,请确保您使用了该集合,并且在以后的代码中,不要将其替换为一个全新的集合(这将表明可能存在设计缺陷)。要强制执行此操作,您可以将集合声明为final。

一般来说,唯一的缺点是,您可能会看到一大堆集合什么也不做,并且不必要地完成了创建集合的工作

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


我要补充的警告是,如果您确实使用了该集合,请确保您使用了该集合,并且在以后的代码中,不要将其替换为一个全新的集合(这将表明可能存在设计缺陷)。要强制执行此操作,您可以将集合声明为final。

您几乎应该立即初始化。只是因为它已经初始化,并不意味着你不应该再做空检查了。创建对象和if检查对性能几乎没有影响。只有在创建一个必须从其他集合或数组复制对象的列表时,才应该几乎总是立即初始化。只是因为它已经初始化,并不意味着你不应该再做空检查了。创建对象和if检查对性能几乎没有影响。仅当您创建一个必须从其他集合或数组复制对象的列表时,它取决于用例:

  • 方法主体声明-始终正常
  • 静态字段声明-应始终正常
  • 字段声明。有两种常见的情况—您总是需要初始化它,或者它可能是
    null
    。在第一种情况下,我将其设置为final,并且更喜欢在构造函数中初始化。如果它可能是
    null
    ,我会添加一个惰性getter,并用
    @Nullable
    对其进行如下注释:
@Nullable
列表strList;
...
公共最终列表getList(){
if(strList==null){
strList=newarraylist();
}
返回strList;
}

此技术帮助我消除字段状态的模糊性。

这取决于用例:

  • 方法主体声明-始终正常
  • 静态字段声明-应始终正常
  • 字段声明。有两种常见的情况—您总是需要初始化它,或者它可能是
    null
    。在第一种情况下,我将其设置为final,并且更喜欢在构造函数中初始化。如果它可能是
    null
    ,我会添加一个惰性getter,并用
    @Nullable
    对其进行如下注释:
@Nullable
列表strList;
...
公共最终列表getList(){
if(strList==null){
strList=newarraylist();
}
返回strList;
}

这项技术有助于消除字段状态的模糊性。

有关此情况的更多信息将非常有用。您将此声明与什么进行比较?此声明的性能比…?任何关于ArrayList的asnwer都可以标记为此问题的答案。更清楚一点。关于情况的更多信息将是有用的。您将此声明与什么进行比较?此声明的性能比…?任何关于ArrayList的asnwer都可以标记为此问题的答案。更清楚一点。如果集合引用从未被重新分配,我也会声明它为final。那么你就知道它是初始化的,并且从不为null。这很有意义。如果集合引用从未被重新分配,我也会声明它为final。然后你就知道它是初始化的,并且从不为空。这很有道理。这个建议不可扩展。创建“一个”对象对性能没有实质性影响;在一个紧循环中创建一百万个对象不仅会增加分配和初始化,而且会增加GC的额外负载。这个建议不会扩展。创建“一个”对象对性能没有实质性影响;在一个紧密循环中创建一百万个对象将不仅用于分配和初始化,而且会增加GC的额外负载。
@Nullable
List<String> strList;

...

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