共计 2086 个字符,预计需要花费 6 分钟才能阅读完成。
数组转 List
1、形式一: List<T> asList(T… a)办法
public static void main(String[] args) {String[] strArray = new String[2];
List<String> list = Arrays.asList(strArray);
list.add("AA");
System.out.println(list);
}
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.AbstractList.add(AbstractList.java:153)
at java.base/java.util.AbstractList.add(AbstractList.java:111)
at com.yefengyu.learn.Array2List.main(Array2List.java:11)
通过 Arrays.asList(T... a)
形式,将数组转换 List 后,不能对 List 增删,只能查改,否则抛异样。
public static void main(String[] args) {String[] strArray = new String[]{"1", "2"};
List<String> list = Arrays.asList(strArray);
list.set(0, "10");
System.out.println(list);
}
[10, 2]
Process finished with exit code 0
2、形式二:应用 ArrayList 结构器形式
通过 ArrayList 的结构器,将 Arrays.asList(T... a)
的返回值由 java.util.Arrays.ArrayList
转为java.util.ArrayList
public static void main(String[] args) {String[] strArray = new String[]{"1", "2"};
List<String> list = new ArrayList<>(Arrays.asList(strArray));
list.add("AA");
list.remove(0);
System.out.println(list);
}
[2, AA]
Process finished with exit code 0
须要在将数组转换为 List 后,对 List 进行增删改查操作,在 List 的数据量不大的状况下,能够应用。
3、形式三:Collections.addAll()办法
通过 boolean addAll(Collection<? super T> c, T... elements)
形式转换,依据数组的长度创立一个长度雷同的 List,而后通过 Collections.addAll(Collection<? super T> c, T... elements)
办法,将数组中的元素转为二进制,而后增加到 List 中,这是最高效的办法。
public static void main(String[] args) {String[] strArray = new String[]{"1", "2"};
ArrayList< String> list = new ArrayList<>(strArray.length);
Collections.addAll(list, strArray);
list.add("AA");
list.remove(0);
System.out.println(list);
}
[2, AA]
Process finished with exit code 0
须要在将数组转换为 List 后,对 List 进行增删改查操作,在 List 的数据量微小的状况下,优先应用,能够进步操作速度。
Collections.addAll 源码如下:
public static <T> boolean addAll(Collection<? super T> c, T... elements) {
boolean result = false;
for (T element : elements)
result |= c.add(element);
return result;
}
4、根本数据类型的数组
int[] strArray = new int[]{1, 2};
List<Integer> list = Arrays.asList(strArray);
下面代码编译会报错!而上面的不会。
Integer[] strArray = new Integer[]{1, 2};
List<Integer> list = Arrays.asList(strArray);
int[]不能间接转换为 List<Integer>,而 Integer[]就能够转换为 List<Integer>。因为 List 中的泛型必须是援用类型,int 是根本数据类型,不是援用类型,但 int 的包装类型 Integer 是 class 类型,属于援用类型,所以 Integer 能够作为 List 形参,List<Integer> 在 java 中是能够存在的,但不存在 List<int> 类型。