以前寫的筆記:
集合與數組的區別:數組保存元素既可以是基本類型的值,也可以是對象的引用。而集合只能保存對象
的引用。
集合由Collection和Map接口派生出。
Collection{
set [EnumSet , SortedSet ( TreeSet), HashSet (LinkedHashSet)],
Queue [ Deque ( LinkedList ) PriorityQueue],
List [LinkedList,ArrayList,Vector( Stack)]
}
Map{
EnumMap,
WeakHashMap,
IdentityHashMap,
HashMap[LinkedHashMap],
Hashtable[Properties],
SortedMap[TreeMap]
}
Iterator接口遍歷集合元素,其對象被稱爲迭代器。
例如:
Collection books=new HashSet();
//獲取books集合對應的迭代器
Iterator it=books.iterator();
while(it.hasNext())
{
String book=(String)it.next();
}
Map接口實現的類的一個功能特徵:Map保存的每項數據都是key-value 對,key不可重複,根據key獲取值。
Set:添加對象到Set中,Set無法記住添加元素的順序,所以元素不能重複。
List:類似於一個可變長度的數組,記住添加元素的順序。
Map:與Ste類似,不過是存key-value對。
HashSet:按hash算法存儲集合中的元素,具有良好的存取和查找功能,不能保證元素的排列順序,
不同步(多線程訪問一個HashSet須通過代碼另外來保證同步),集合元素可以是null。
通過對象的HashCode決定存儲的位置,HashCode不相等且equals方法比較不相等即可存儲。
LinkedHashSet:HashSet的子類,使用鏈表維護元素的次序。
TreeSet:是SortedSet接口的唯一實現,保證集合元素處於排序狀態。採用紅黑樹的數據結構對元
素進行排序,調用集合元素的comparableTo()方法比較元素的大小。兩種排序方法:自然排序(默
認,升序),定製排序。
注意:向TreeSet中添加元素時,只有第一個元素無須實現Comparable接口,後面的元素必須實
現該接口。
定製排序:
class M
{
int age;
public M(int age)
{
this.age=age;
}
}
public class TestTreeSet
{
public static void main(String[] args)
{
TreeSet ts=new TreeSet(new Comparator()
{
public int compare(Object 01,Object O2)
{
M m1=(M)o1;
M m2=(M)o2;
if(m1.age>m2.age) return -1;
else if(m1.age==m2.age) return 0;
else return 1;
}
}
);
}
}
List接口:List額外有一個listIterator接口,其增加了向前迭代功能hasPrevious(),previous(),add.
Vector提供了一個Stcak子類。
Queue接口:隊列,實現類有LinkedList,PriorityQueue。
LinkedList可以當作棧也可以當作雙向隊列來使用。
priorityQueue ” “ 是一個 標準隊列 實現類,不是真正的隊列,而是取出的是隊列中最小的元素。
Map:
HashMap:線程不安全,強引用,不刪除是不會被回收。Hashtable:線程安全。
WeakHashMap:弱引用。
網上找的總結
List總結:
1. 所有的List中只能容納單個不同類型的對象組成的表,而不是Key-Value鍵值對。例如:[ tom,1,c ];
2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];
3. 所有的List中可以有null元素,例如[ tom,null,1 ];
4. 基於Array的List(Vector,ArrayList)適合查詢,而LinkedList(鏈表)適合添加,刪除操作。
Set總結:
1. Set實現的基礎是Map(HashMap);
2. Set中的元素是不能重複的,如果使用add(Object obj)方法添加已經存在的對象,則會覆蓋前面的對象。
簡介: