Java容器類類庫的用途是"保存對象", 並將其劃分爲兩個不一樣的概念:java
(1)Collection: 一個獨立元素的序列, 這些元素都服從一條或多條規則. List必須按照插入的順序保存元素, 而Set不能有重複元素. Queue按照排隊規則來肯定對象產生的順序(一般與它們被插入的順序相同)編程
(2)Map: 一組成對的"鍵值對"對象, 容許你使用鍵來查找值, 它也被稱爲"關聯數組", 由於它將某些對象與另一些對象關聯在了一塊兒, 或者被稱爲"字典", 由於你可使用鍵對象來查找值對象, 就像在字典中使用單詞來定義同樣. Map是強大的編程工具.數組
在java.util包中的Arrays和Collections類中都有不少實用方法, Arrays.asList()接收一個數組或是一個用逗號分隔的元素列表(使用可變參數), 並將其轉換爲一個List對象, Collections.addAll()方法接受一個Collections對象, 以及一個數組或是一個逗號分隔的列表, 將元素添加到Collection中, 下面的示例展現了這兩個方法:
工具
public static void main(String[] args) { //Collection Collection<Integer> collection = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5)); Integer[] i = {6, 7, 8, 9, 10}; collection.addAll(Arrays.asList(i)); Collections.addAll(collection, 11, 12, 13, 14, 15); Collections.addAll(collection, i); for (Integer c : collection) { System.out.print(c + ","); } // output: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,7,8,9,10, }
可是, Arrays.asList()方法的限制是它對所產生的List的類型作出了最理想的假設, 而並無注意到它會賦予什麼樣的類型, 有時候就會引起問題: spa
class Snow {}
class Powder extends Snow {}
class Light extends Powder {}
class Heavy extends Powder {}
class Crusty extends Snow {}
class Slush extends Snow {} public class j_221 { public static void main(String[] args) { List<Snow> snow1 = Arrays.asList(new Crusty(), new Slush(), new Powder()); //List<Snow> snow2 = Arrays.asList(new Light(), new Heavy()); List<Snow> snow3 = new ArrayList<Snow>(); Collections.addAll(snow3, new Light(), new Heavy()); List<Snow> snow4 = Arrays.<Snow>asList(new Light(), new Heavy()); } }
當試圖建立snow2時, Arrays.asList()中只有Powder類型, 所以它會建立List<Powder>而不是List<Snow>, 儘管Conllections.addAll()工做的很好, 由於他從第一個參數中瞭解到了目標類型是什麼; 正如從建立snow4操做中所看到的,能夠在Arrays.asList()中間插入一條"線索", 以告訴編譯器對於由Arrays.asList()產生的List類型, 實際的目標類型應該是什麼, 這稱爲顯示類型參數說明.code