Collection和Arrays新增元素的方法的幾點注意問題
阿新 • • 發佈:2019-02-15
Collections給集合新增元素的方法
官方原始碼
public static <T> boolean addAll(Collection<? super T> c, T... elements) {
boolean result = false;
for (T element : elements)//遍歷可變引數,一次新增到集合中
result |= c.add(element);
return result;//全部新增成功返回true,最後一個新增失敗返回false
}
Arrays給集合新增元素的方法
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}//返回一個固定長度的List集合
使用Arrays新增元素時,如果指定了元素型別,則所加元素當中至少有兩個元素是所指定元素型別的直接子類或者至少一個是所指元素型別本身。但是使用Collections就不存在這種問題。只要指定了元素型別,那麼所新增的元素主要是所指元素的直接或者間接子類,或者所指元素型別本身就可以。
看例項程式碼
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List ;
class Snow{};
class Powder extends Snow{};
class Light extends Powder{};
class Heavy extends Powder{};
class Crusty extends Snow{};
class Slush extends Snow{};
public static void main(String[] args) {
List<Snow> snow1=Arrays.asList(new Crusty(),new Slush(),new Powder(),new Heavy());//編譯通過,Crusty,Powder,Slush是Snow的直接子類
List<Snow> snow2=Arrays.asList(new Light(),new Heavy(),new Powder());//編譯不過,因為元素型別中只有Powder和子類,所以Lsit<Snow>需要修改為List<Powder>
//修改為
List<Snow> snow2=Arrays.asList(new Light(),new Heavy(),new Powder(),new Snow());//編譯通過
List<Powder> snow2=Arrays.asList(new Light(),new Heavy(),new Powder());//編譯通過
//Collections實現
List<Snow> snow3=new ArrayList<Snow>();
Collections.addAll(snow3, new Light(),new Heavy(),new Slush());//snow3指定了型別
}
}
補充說明一下,下面程式碼是錯誤的,執行時錯誤
List list= Arrays.asList(1,2,"anb");
ArrayList li=(ArrayList)list;//java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList
Arrays.asList(T...a)返回的list不可以強制轉為arraylist的