Collection是集合框架的根接口,他的抽象方法被子類子類實現 :
size()長度 isEmpty()判斷是否爲空 clear()清空 contains()包含 addAll()添加集合
add()添加 removve()移除 containsAll()判斷調用的數組是否()包含 iterator()迭代器 retainAll()交集 toArray()轉數組
Collection有兩個分支:(1)List(列表)有索引 List的四個實現類
(2)Set(集合)不一定有索引 ArrayList
List和Set也都是接口 LinkedList
Vector
Stck
ArrayList 數組結構(查詢快) :
import java.util.*;
class Demo1{
public static void main(String[]args){
List al1=new ArrayList();//初始容量爲10,如果超過,自動增加0.5*當前容量
List al2=new ArrayList(5);//指定初始容量爲5
al1.add(1);//添加1 可以添加多種類型
al1.add(0,"x2");//在索引2插入,原本索引2的不會消失,向後移
System.out.println(al1);//打印結果爲:[x2, 1]
//可以把一個集合插到另一個集合
al1.addAll(al2);
System.out.println(al1);
//判斷集合中是否包含字符串“123”
System.out.println(al1.contains("123"));//打印結果爲:false
//遍歷集合:
for(int i=0;i<al1.size();i++){//al1.size()集合長度
System.out.println(al1.get(i));
}
//移除
al1.remove(1);
System.out.println(al1);//打印結果爲:[x2]
//移除指定元素
al1.remove("x2");//從第一個異常,只移除一個,如果後面還有x2,並不移除
System.out.println(al1);//打印結果爲:[]
//移除指定元素所有
al1.add("x0");
al1.add("x1");
al1.add("x2");
al1.add("x2");
al2.add("x2");
al1.removeAll(al2);//這裏引用的是一個對象,並不像往上一樣直接添加字符串“x2”
System.out.println(al1);//打印結果爲:[x0, x1]
//保留此列表中指定元素
List al3=new ArrayList();
al3.add("x0");
al1.retainAll(al3);
System.out.println(al1);//打印結果爲:[x0]
/*al1.set(0,88)指定元素替換此索引位置
al1.subList(1,2);取索引1至2的元素(此時是個新列表需要對象接收)*/
//集合轉數組
Object[] objArr=al1.toArray();//trimTosize()修改容量
//數組轉集合,轉的集合和不能再改變長度
List list=Arrays.asList(objArr);
}
}
泛型 java1.5以後出現的新特性(具有安全性,不能亂放類型了) :
import java.util.*;
class Demo1{
public static void main(String[]args){
List<Integer> list1=new ArrayList<Integer>();//只能放(Integer)
/*同樣也可以自己定義類比如 定義一個動物類以及Dog類並繼承類
List<Animal> list1=new ArrayList<Animal>();只能存放動物類動物類Dog或派生類*/
}
}
LinkedList(鏈結構)增刪快,與ArrayList有許多一樣的使用方法,下列是不一樣 :
import java.util.*;
class Demo1{
public static void main(String[]args){
LinkedList<Integer>lis1=new LinkedList<Integer>();//由於他是自有的,父類沒有,所以不能使用多態
lis1.add(8);
lis1.add(1);
lis1.add(2);
lis1.add(3);
int i=lis1.element();//檢索但不刪除此列表的頭(第一個元素)
System.out.println(i);//打印 :8
/*lis1.get(2);//返回此列表中的指定位置元素
getFirst()返回第一個元素 getLast()返回最後一個元素
push(E e)將元素放在第一個 poll()刪除第一個*/
}
}
還有許多使用方法可以取API查看
Vector 線程安全的(效率不高,是以效率爲代價達到的線程安全的)不舉例了
高級for遍歷:
for(Object k:lis1){
System.out.println(k);
}
迭代遍歷集合:
//迭代遍歷器
Iterator it=lis1.iterator();
while(it.hasNext()){//判斷這個迭代器裏面是否有元素
Object a=it.next();//有就使用next取出
System.out.println(a);
}
注意:
(1)集合中可以添加任意類型的數據,因爲add方法的參數是Object類型(在沒有使用泛型的情況下);
(2)當集合中添加基本數據類型時,java編譯器會自動將轉爲對應的封裝類類型;
(3)集合中存放的是所有對象的引用,並不是對象本身,所以集合中的元素也是對對象的引用;
(4)集合類的toString()方法返回由所以元素組成的字符串,如果元素又是一對象,則調用對象的toString()方法;
(5)每次對兩個集合操作時,只有一個集合存放結果,另一個集合的內容不變;