容器類:用來解決數組具有固定尺寸而使得靈活性受限的問題。基本的容器類(集合類)有:List、Set、Queue、Map。
Java容器類類庫的用途是用來“保存對象”,這分為兩個不同的大類:
1.Collection(集合的根接口)
2.Map:每個槽內保存了兩個對象,即鍵/值對。
它們的區別在于容器中每個“槽”可以保存的元素個數。Collection的每個槽只能保存一個元素。此類容器包括:
1)List:以特定的順序保存一組元素
2)Set:元素不能重復
3)Queue:只允許在容器的一“端”插入對象,并從另一“端”移除對象
最早在學習泛型類的時候接觸過的容器類有:ArrayList。使用add()和get(index)來添加和訪問對象,set(index,element)修改對象,size()返回當前容器中添加了多少個元素,相當于長度。注:ArrayList是一個實現了Collection接口的類。
?
復習一下關于ArrayList的兩種定義方法:
方法一:ArrayList list = new ArrayList()
這樣存進去的對象默認都是Object類型的,但在當使用get取出時必須進行類型轉換,否則是Object的引用。
方法二:ArrayList<T> list = new ArrayList<T>()
在最開始就預定義了類型,這樣get時就不需要進行顯示類型轉換。
當指定了類型T時,并不僅限于只能該確切的T類對象放置到容器中,可以向上轉型。即可以存放T的子類對象到容器中。
下面是一個ArrayList操作的小例子:
1 import java.util.ArrayList; 2 public class A { 3 public static void main(String[] args) { 4 ArrayList<Basic> list = new ArrayList<Basic>(); 5 list.add(new Z1()); 6 list.add(new Z2()); 7 list.add(new Z3()); 8 for(Basic b:list){ 9 System.out.println(b); 10 } 11 } 12 } 13 class Basic{} 14 class Z1 extends Basic{}; 15 class Z2 extends Basic{}; 16 class Z3 extends Basic{};
前面介紹過Collection容器類是用來保存對象的集合,那么如何往Collection中添加對象呢?方法是很多的,下面介紹了4種常見方法:
1.add()
2.Arrays.asList(數組/元素列表): 接受一個數組或者是用逗號分割的元素列表,將其轉換成一個List對象。
3.使用靜態類Collections中的addAll(collection,數組/元素列表)方法
4.直接用Arrays.asList()輸出,將其當作是List。但其實底層還是數組,因此不能調整尺寸。可以用set()來修改元素,但不能用add()添加,否則會報異常。
Collection添加元素的Demo:
1 import java.util.ArrayList; 2 import java.util.Arrays; 3 import java.util.Collection; 4 import java.util.Collections; 5 import java.util.List; 6 7 public class A { 8 public static void main(String[] args) { 9 // 元素列表 10 Collection<Integer> c = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5)); 11 12 // 接受一個數組轉換成List 13 Integer[] moreInts = { 6, 7, 8, 9, 10 }; 14 c.addAll(Arrays.asList(moreInts)); 15 16 // 使用靜態類Collections中的方法 17 Collections.addAll(c, 11, 12, 13, 14, 15); 18 19 // addAll方法也可以接受數組 20 Collections.addAll(c, moreInts); 21 22 23 //foreach方式打印 24 for(Integer i: c){ System.out.print(i+" "); } 25 26 27 // 直接用Arrays.asList()輸出 28 List<Integer> list = Arrays.asList(moreInts); 29 list.set(0, 1); 30 /* 31 * list.add(100); 32 * 這條編譯不通過,原因是底層仍舊是一個數組,不能更改尺寸 33 */ 34 35 //容器類默認打印方式 36 System.out.println(list); 37 38 } 39 }
容器的默認打印行為:默認調用toString(),打印的結果用中括號括起來。如:上面例子最后一條 [1, 7, 8, 9, 10]