1,集合類
包含:set、list、map、queue四大體系。其中set代表無序、不可重複的集合;list代表有序、可重複的集合。map代表具有映射關係的集合;queue代表隊列集合。
Java集合類與數組的區別:Java的集合類的長度是動態的,數組則是固定長度的。
List、Set、Map接口及各實現類的特性
接口 |
特性 |
實現類 |
實現類特性 |
成員要求 |
List |
線性、有序的存儲容器,可通過索引訪問元素 |
ArrayList |
數組實現。非同步。 |
|
Vector |
類似ArrayList,同步。 |
|
||
LinkedList |
雙向鏈表。非同步。 |
|
||
Map |
保存鍵值對成員 |
HashMap |
基於哈希表的 Map 接口的實現,滿足通用需求 |
任意Object對象,如果修改了equals方法,需同時修改hashCode方法 |
TreeMap |
默認根據自然順序進行排序,或者根據創建映射時提供的 Comparator進行排序 |
鍵成員要求實現caparable接口,或者使用Comparator構造TreeMap。鍵成員一般爲同一類型。 |
||
LinkedHashMap |
類似於HashMap,但迭代遍歷時取得“鍵值對”的順序是其插入順序或者最近最少使用的次序 |
與HashMap相同 |
||
IdentityHashMap |
使用==取代equals()對“鍵值”進行比較的散列映射 |
成員通過==判斷是否相等 |
||
WeakHashMap |
弱鍵映射,允許釋放映射所指向的對象 |
|
||
ConcurrentHashMap |
線性安全的Map |
|
||
Set |
成員不能重複 |
HashSet |
爲快速查找設計的Set |
元素必須定義hashCode() |
TreeSet |
保持次序的Set,底層爲樹結構 |
元素必須實現Comparable接口 |
||
LinkedHashSet |
內部使用鏈表維護元素的順序(插入的次序) |
元素必須定義hashCode() |
2,List
特有方法:
(1)增加
void add(int index, E element):在列表的指定位置插入指定元素(可選操作)。
boolean addAll(int index, Collection<? extends E> c):將指定 collection中的所有元素都插入到列表中的指定位置(可選操作)。
(2)刪除
boolean remove(Object o):從此列表中移除第一次出現的指定元素(如果存在)(可選操作)。
(3)修改
E set(int index, E element):用指定元素替換列表中指定位置的元素(可選操作)。
(4)查詢
E get(int index):返回列表中指定位置的元素。
List<E> subList(int fromIndex, int toIndex):返回列表中指定的fromIndex(包括 )和toIndex(不包括)之間的部分視圖。
ListIterator<E> listIterator():返回此列表元素的列表迭代器(按適當順序)。
List集合特有迭代器:ListIterator是Iterator的子接口。在迭代時,不可以通過集合對象的方法操作集合中的元素,因爲會發生ConcurrentModificationException異常。所以,在迭代時,只能用迭代器的放過操作元素,可是Iterator方法是有限的,只能對元素進行判斷,取出和刪除的操作。如果想要其他的操作如添加、修改等,就需要使用其子接口ListIterator,該接口只能通過List集合的ListIterator方法獲取。
運行示例:
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add("java0");
al.add("java1");
al.add("java2");
al.add("java3");
sop("原集合是:"+al);
//演示列表迭代器
ListIterator li = al.listIterator();
while(li.hasNext()){
Object o = li.next();
if(o.equals("java2"))
li.set("java5");
}
sop("修改後集合是:"+al);
}
public static void sop(Object obj){
System.out.println(obj);
}