集合概覽
數組的優點
•是Java提供的随機通路對象序列的最有效方法
•是一個簡單的線性序列,通路元素的速度較快
•數組的缺點:大小自建立以後就固定了,在其整個生存期内其大小不可改變
•數組元素隻能是同一類型
集合(Collection)
•可動态改變其大小
•可在序列中存儲不同類型的資料
把具有相同性質的一類東西,彙聚成一個整體
•在Java2中有很多與集合有關的接口及類
•它們被組織在以Collection及Map接口為根的層次結構中,稱為集合架構
•在Java2之前,在Java 1.0/1.1中,沒有完整的集合架構。隻有一些簡單的可以自擴充的容器類
•Vector •Hashtable
簡單來說,集合就是用來存儲對象的容器
由來:
對象用于封裝特有資料,對象多了需要存儲,如果對象個數不确定,就用集合容器進行存儲
特點:
- 用于存儲對象的容器
- 集合長度是可變的
- 集合中不可以存儲基本資料類型
針對不同用途有不同容器,依據不同的用途用不同的容器
集合容器因為内部的資料結構不同,有多種具體容器。
不斷向上抽取,就形成了集合架構。
架構頂層Collection接口
常見方法:
-
添加
boolean add(Object obj);
boolean addAll(Collection coll);
public static void show(Collection coll){
coll.add("abc");
System.out.println(coll);
}
-
删除
boolean remove (Object obj);
boolean removeAll(Collection coll); //将兩個集合中的相同元素從調用removeAll的集合中删除
void clear();
-
判斷
boolean contains(Object obj);
boolean containsAll(Collection coll);
boolean ifEmpty();判斷集合中是否有元素
-
擷取
int size();
Iterator iterator();取出元素的方式:疊代器
Collection coll = new ArrayList();
coll.add("abc1");
coll.add("abc2");
Iterator it = coll.iterator();
//兩種方式:
//第一種方式:
while(it.hasNext()){
System.out.println(it.next());
}
//第二種方法:
for(Iterator it = coll.iterator();it.hasNext();){
System.out.println(it.next());
}
該對象必須依賴于具體容器,因為每一個容器的資料結構不同
是以該疊代器對象是在容器内部實作的
對于容器使用者而言,具體的實作不重要,值要通過容器擷取到該實作的疊代器對象即可,也就是iterator方法
Iterator接口就是對所有的Collection容器進行元素取出的公共接口
-
其他
boolean retainAll(Collection coll);取交集
Object[] toArray();将集合轉成數組
常用子接口
List和Set
List
有序的collection(也稱為序列),此接口的使用者可以對清單中每個元素的插入位置進行精準的控制。使用者可以根據元素的整數索引(在清單中的位置)通路元素,并搜尋清單中的元素
與set不同,元素可以重複
特有的常見方法:
有一個共性特點就是可以增加角标
- 添加
void add(index,element);
void add(index,collection);
- 删除
- 修改
- 擷取
Object get(index);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
int indexOf(object);
int lastIndexOf(object);
List sublist(from,to);
在使用疊代器的時候不能進行集合操作,否則會造成并發錯誤
這時候我們需要使用iterator的子接口listIterator()方法,來完成疊代過程中對集合的操作
有三個常用對象:
- Vector:(内部是數組資料結構)可以實作可增長對象數組,Vector大小可以根據需要增大或縮小,以适應建立Vector後進行添加或移除項的操作
- ArrayList:内部是數組資料結構,是不同步的。替代了Vector。
- Linkedlist:内部是連結清單資料結構,是不同步的
Set
不包含重複元素,無序。
Map
一次添加一對元素
将鍵映射到對象,map集合必須保證鍵的唯一性
-
添加
value put(key,value);