数组到集合:优化代码

mar*_*pes 39 java arrays collections

有没有更好的方法来实现这一目标?

public static List<String> toList(String[] array) {

    List<String> list = new ArrayList(array.length);

    for(int i=0; i<array.length; i++)
        list.add(array[i]);

    return list;
}
Run Code Online (Sandbox Code Playgroud)

注意:Arrays.asList(a)返回由指定数组支持的固定大小的列表.(对返回列表的更改"直写"到数组.).我不希望这种行为.我假设上面的MY函数绕过了(或者我错了吗?)

所以,在这里我们有另一种方法:

public static List<String> toList(String[] array) {

    List<String> list = new ArrayList(array.length);

    list.addAll(Arrays.asList(array));

    return list;
}
Run Code Online (Sandbox Code Playgroud)

只是看着它,我不相信它比第一种方法更快.

Ral*_*lph 42

你用更好的方式是什么意思:

更具可读性:

List<String> list = new ArrayList<String>(Arrays.asList(array));
Run Code Online (Sandbox Code Playgroud)

内存消耗更少,也许更快(但绝对不是线程安全):

public static List<String> toList(String[] array) {
    if (array==null) {
       return new ArrayList(0);
    } else {
       int size = array.length;
       List<String> list = new ArrayList(size);
       for(int i = 0; i < size; i++) {
          list.add(array[i]);
       }
       return list;
    }
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句:这是你的第一个例子中的一个错误:

array.length如果array为null,则会引发空指针异常,因此if (array!=null)必须先进行检查.

  • 您可以使用[Collections.EMPTY_LIST](http://download.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html#EMPTY_LIST)代替新的ArrayList(0). (2认同)

Jig*_*shi 31

Arrays.asList(array);    
Run Code Online (Sandbox Code Playgroud)

例:

 List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
Run Code Online (Sandbox Code Playgroud)

请参阅Arrays.asList课程文档.


Boz*_*zho 17

Arrays.asList(array)
Run Code Online (Sandbox Code Playgroud)

Arrays用途new ArrayList(array).但这不是java.util.ArrayList.但它非常相似.请注意,此构造函数接受数组并将其作为列表的后备数组.就是这样O(1).

如果您已经创建了列表Collections.addAll(list, array),但效率较低.

更新:这样你Collections.addAll(list, array)就成了一个不错的选择.它的包装是番石榴Lists.newArrayList(array).


小智 13

另一种方法:

Collections.addAll(collectionInstance,array);
Run Code Online (Sandbox Code Playgroud)


ant*_*ant 9

关于什么 :

List myList = new ArrayList(); 
String[] myStringArray = new String[] {"Java", "is", "Cool"}; 

Collections.addAll(myList, myStringArray); 
Run Code Online (Sandbox Code Playgroud)


Moh*_*igh 6

您可以使用:

list.addAll(Arrays.asList(array));
Run Code Online (Sandbox Code Playgroud)