数组到集合:优化的代码

2022-08-31 19:42:35

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

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;
}

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

因此,在这里我们有替代方法:

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

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

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

    return list;
}

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


答案 1

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

更具可读性:

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

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

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;
    }
}

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

array.length如果数组为 null,将引发空指针异常,因此必须首先执行检查。if (array!=null)


答案 2
Arrays.asList(array);    

例:

 List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");

请参阅 Arrays.asList 类文档。