1. 程式人生 > >new ArrayList、subList和Arrays.asList淺析

new ArrayList、subList和Arrays.asList淺析

在Java中List是我們很常用的資料結構,對此我們有必要簡單瞭解一下建立List的三種方式並對它們進行一些簡單的測試。

  • new ArrayList
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
System.out.println("----------new ArrayList----------");
for (Integer i : list) {
    System.out.println
(i); } list.set(0, 10); System.out.println("----------set修改----------"); for (Integer i : list) { System.out.println(i); } list.remove(0); System.out.println("----------remove刪除----------"); for (Integer i : list) { System.out.println(i); } list.add(0, 0); System.out.println("----------add新增----------"
); for (Integer i : list) { System.out.println(i); } 列印結果: ----------new ArrayList---------- 1 2 3 4 5 ----------set修改---------- 10 2 3 4 5 ----------remove刪除---------- 2 3 4 5 ----------add新增---------- 0 2 3 4 5

使用new ArrayList<>()建立的List的增、刪、改操作都正常。

  • subList
List<Integer> list = new ArrayList<>();
list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); List<Integer> subList = list.subList(2, 4); System.out.println("----------subList----------"); for (Integer i : subList) { System.out.println(i); } for (Integer i : list) { System.out.println(" " + i); } subList.set(0, 10); System.out.println("----------set修改----------"); for (Integer i : subList) { System.out.println(i); } for (Integer i : list) { System.out.println(" " + i); } subList.remove(0); System.out.println("----------remove刪除----------"); for (Integer i : subList) { System.out.println(i); } for (Integer i : list) { System.out.println(" " + i); } subList.add(0, 0); System.out.println("----------add新增----------"); for (Integer i : subList) { System.out.println(i); } for (Integer i : list) { System.out.println(" " + i); } 列印結果: ----------subList---------- 3 4 1 2 3 4 5 ----------set修改---------- 10 4 1 2 10 4 5 ----------remove刪除---------- 4 1 2 4 5 ----------add新增---------- 0 4 1 2 0 4 5

如上所示,List的增、刪、改操作也都正常。其實使用subList建立的List返回的是ArrayList的內部類SubList,並不是ArrayList,而是ArrayList 的一個檢視,對於SubList子列表的所有操作最終會反映到原列表上。

  • Arrays.asList
List<Integer> list = Arrays.asList(1,2,3,4,5);
System.out.println("----------Arrays.asList----------");
for (Integer i : list) {
    System.out.println(i);
}
list.set(0, 10);
System.out.println("----------set修改----------");
for (Integer i : list) {
    System.out.println(i);
}
list.remove(0);
System.out.println("----------remove刪除----------");
for (Integer i : list) {
    System.out.println(i);
}
list.add(0, 0);
System.out.println("----------add新增----------");
for (Integer i : list) {
    System.out.println(i);
}
列印結果:
----------Arrays.asList----------
1
2
3
4
5
----------set修改----------
10
2
3
4
5
Exception in thread "main" java.lang.UnsupportedOperationException

如上所示,List的set修改可以執行,但是remove和add方法丟擲UnsupportedOperationException異常錯誤。
使用工具類Arrays.asList()把陣列轉換成集合時,不能使用其修改集合相關的方法,它的add/remove/clear方法會丟擲UnsupportedOperationException異常。
asList的返回物件是一個Arrays內部類,並沒有實現集合的修改方法。Arrays.asList體現的是介面卡模式,只是轉換介面,後臺的資料仍是陣列。

總結

# add remove set clear
new ArrayList
subList
Arrays.asList