標籤:
java.util包中的Arrays和Collections提供了很多方便的方式來往一個Collection中添加元素。Arrays.asList()方法接受一個數組或者用逗號分隔的元素列表,並將其轉換為一個List對象。當然,這個數組中儲存的或者元素列表中的元素可以是任何對象。而Collections.addAll()方法接受一個Collection對象以及一個數組或者用逗號分隔的元素列表,將元素添加到Collection對象中。
// Collection的構造器可以接受另一個Collection來將自己初始化// Arrays.asList()來為其產生輸入Collection<Integer> collection = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6));Integer[] moreInts = { 7, 8, 9, 10, };collection.addAll(Arrays.asList(moreInts));// 下面的啟動並執行要快一點 但是不能通過這種方式構造一個CollectionCollections.addAll(collection, 11, 12, 13, 14, 15);Collections.addAll(collection, moreInts);// 以數組建立一個List 但是不能往裡面添加元素 因為數組長度已經固定了// 如果嘗試添加則會導致執行階段錯誤,就是說只有在啟動並執行時候才會報錯List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);//list.add(6);
Arrays.asList()和Collections.addAll()使用了可變參數列表,因而比Collection.addAll()成員方法要靈活。
《Thinking In Java》關於Arrays.asList()的部分可能有點過時了,比如在討論Arrays.asList()產生的List的類型的時候。
class Snow {}class Powder extends Snow {}class Light extends Powder {}class Heavy extends Powder {}class Crusty extends Snow {}class Slush extends Snow {}public class AsListInference { public static void main(String[] args) { List<Snow> snow1 = Arrays.asList( new Crusty(), new Slush(), new Powder() ); // 可以編譯 產生的List不會是Powder類型而是Snow List<Snow> snow2 = Arrays.asList( new Light(), new Heavy() ); List<Snow> snow3 = new ArrayList<>(); Collections.addAll(snow3, new Light(), new Heavy()); List<Snow> snow4 = Arrays.<Snow>asList( new Light(), new Heavy() ); } }
上面四種方式現在都是可以的,其中snow2在Java8以前是編譯不了的。這樣看的話第四種方式現在就顯得有點多餘了,當然你得使用Java8。
Java容器添加元素