日曆分析(三) java集合類

以前寫的筆記:


集合與數組的區別:數組保存元素既可以是基本類型的值,也可以是對象的引用。而集合只能保存對象
的引用。
集合由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)方法添加已經存在的對象,則會覆蓋前面的對象。


簡介:

HashSet: 使用HashMap的一個集的實現。雖然集定義成無序,但必須存在某種方法能相當高效地找到一個對象。使用一個HashMap對象實現集的存儲和檢索操作是在固定時間內實現的.
TreeSet: 在集中以升序對對象排序的集的實現。這意味着從一個TreeSet對象獲得第一個迭代器將按升序提供對象。TreeSet類使用 了一個TreeMap.
列表:
Vector: 實現一個類似數組一樣的表,自動增加容量來容納你所需的元素。使用下標存儲和檢索對象就象在一個標準的數組中一樣 。你也可以用一個迭代器從一個Vector中檢索對象。Vector是唯一的同步容器類??當兩個或多個線程同時訪問時也是性能良好的。
Stack: 這個類從Vector派生而來,並且增加了方法實現棧??一種後進先出的存儲結構
LinkedList: 實現一個鏈表。由這個類定義的鏈表也可以像棧或隊列一樣被使用。
ArrayList: 實現一個數組,它的規模可變並且能像鏈表一樣被訪問。它提供的功能類似Vector類但不同步。
映射:
HashTable: 實現一個映象,所有的鍵必須非空。爲了能高效的工作,定義鍵的類必須實現hashcode()方法和equal()方法。這個類 是前面java實現的一個繼承,並且通常能在實現映象的其他類中更好的使用。
HashMap: 實現一個映象,允許存儲空對象,而且允許鍵是空(由於鍵必須是唯一的,當然只能有一個)。
WeakHashMap: 實現這樣一個映象:通常如果一個鍵對一個對象而言不再被引用,鍵/對象對將被捨棄。這與HashMap形成對照,映象 中的鍵維持鍵/對象對的生命週期,儘管使用映象的程序不再有對鍵的引用,並且因此不能檢索對象。
TreeMap: 實現這樣一個映象,對象是按鍵升序排列的。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章