表演&学习ArrayList构造函数之间的差异

时间:2016-09-23 18:45:36

标签: java

以下是否有任何实际表现或不良/良好做法差异?

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

1 个答案:

答案 0 :(得分:0)

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

使用addAll vs add您可能看不到性能差异。

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

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