ArrayList 构造函数之间的性能和学习差异



以下各项之间是否存在实际性能或不良/良好实践差异?

List<String> l = new ArrayList<String>()
{{
    add( "ohai" );
    add( "Hey;)" );
    add( "Hii" );
}};
// or..
List<String> l = new ArrayList<String> ( Arrays.asList( "ohai" , "Hey;)" , "Hii" ) );
// or..
List<String> l = new ArrayList<String>()
{{
    addAll( Arrays.asList( "ohai" , "Hey;)" , "Hii" );
}};
// or finally..
List<String> l = Arrays.asList( "ohai" , "Hey;)" , "Hii" );

双括号初始化版本的速度相似,也是最慢的。这是因为它创建了一个匿名类,以便在初始化期间运行内部块。双大括号初始化在语法上可能很好,如果只需要创建一次List,那么性能的降低是可以忽略的。如果您要创建数百个列表,您可能需要选择不同的方法。

使用addAlladd,您可能不会看到性能差异。

写入new ArrayList<String>(Arrays.asList(...))将创建Arrays.asList返回的列表的副本,这将比仅调用Arrays.asList慢。

根据正在执行的操作,将列表封装在ArrayList中是个好主意。例如ArrayList非常适合进行基于索引的查找。

最新更新