Java集合(轉帖)

一、總結

1. 所有Java集合類都位於java.util包中,與Java數組不同,Java集合中不能存放基本數據類型,只能存放對象的引用。

2. Set、List、Map統稱爲Java集合。

3. 在將對象存儲到集合類中時,爲加快存儲速度,要求被在座對象的類中必須覆蓋equals()方法和hashCode()方法。即如果一個類重新實現了 equals()方法,那麼也應該重新實現hashCode()方法,並且保證當兩個對象相等時,它們的哈希碼也相同。

4. <? extends Object> 對集合類的範型設定了上限,表示接受Object類型及其子類型。

<? super String> 對集合類的範型設定了下限,表示接受String類型及其父類型。

5. 遍歷集合可使用“for(Type t : c){…}”語法,其中c表示需要遍歷的集合,Type表示集合內元素的類型,t引用每次從集合中取出的當前元素。

6. 對於Java集合,還有一個實用類,即java.util.Collections,它的一部分方法專門用於操縱List類型集合,還有一部分方法可用於操縱所有的Collection類型或Map類型集合。

二、Collection和Iterator接口

1. Collection接口的方法

方法

描述

boolean add(Object o)

向集合中加入一個對象的引用

void clear()

刪除集合中的所有對象,即不再持有這些對象的引用

boolean contains(Object o)

判斷在集合中是否持有特定對象的引用

Iterator iterator()

返回一個Iterator對象,可用它來遍歷集合中的元素

boolean remove(Object o)

從集合中刪除一個對象的引用

int size()

返回集合中元素的數目

Object[] toArray()

返回一個數組,該數組包含集合中的所有元素

boolean isEmpty()

判斷集合是否爲空

注:Set接口和List接口繼承了Collection接口,而Map接口沒有繼承Collection接口,所以Set對象和List對象可以調用以上方法,但Map對象不能調用以上方法。

2. Iterator接口中聲明瞭以下方法:

a) hasNext():判斷集合中的元素是否遍歷完畢,如果沒有,就返回true。

b) next():返回下一個元素。

c) remove():從集合中刪除上一個由next()方法返回的元素。

3. 如果集合中的元素沒有排序,Iterator遍歷集合中元素的順序是任意的,並不一定與向集合中加入元素的順序保持一致。

4. 當通過Collection集合的iterator()方法得到一個Iterator對象後,如果當前線程或其他線程接着又通過Collection集合 的一些方法對集合進行了修改操作(調用當前Iterator對象的remove()方法來修改集合除外),接下來訪問這個Iterator對象的 next()方法會導致java.util.ConcurrentModificationException運行時異常。

三、Set(集)

1. Set接口主要有兩個實現類:HashSet和TreeSet。HashSet類有一個子類LinkedHashSet類,它不僅實現了哈希算法,而且實 現了鏈表數據結構。TreeSet類實現了SortedSet接口,具有排序功能。此外還有一個以數組爲基礎實現的Set類 CopyOnWriteArraySet。

2. Set系列類的方法不支持插入和修改。同時Set集合中不能有重複的對象。

3. Set採用對象的equals()方法比較兩個對象是否相等,即判斷這個某個對象是否已經存在於集合中。

4. 當向集合中加入一個對象時,HashSet會調用對象的hashCode()方法來獲得哈希碼,然後根據這個哈希碼進一步計算出對象在集合中的存放位置。

5. TreeSet支持兩種排序方式:自然排序和客戶化排序。在默認情況下,TreeSet採用自然排序方式。

6. TreeSet調用對象的compareTo()方法比較集合中對象的大小 ,然後進行升序排列,這種排序方式稱爲自然排序。使用自然排序時,只能向TreeSet集合中加入同類型的對象,並且這些對象的類必須實現了Comparable接口。

7. 最適合TreeSet排序的是不可變類。

8. TreeSet類支持客戶化排序,可以先創建一個實現java.util.Comparator<Type>接口的 類,<Type>指定被比較的對象的類型,Comparator有個compare(Type x,Type y)方法,用於比較兩個對象的大小。當compare(x,y)的返回值大於0時,表示x>y,返回值小於0時,表示x<y,返回值等於0 時,表示x等於y。示例代碼如下:

import java.util.Comparator;

import java.util.Iterator;

import java.util.Set;

import java.util.TreeSet;

public class CustomerComparator implements Comparator {

public int compare(Customer x,Customer y){

if (x.getName().compareTo(y.getName()) > 0)

return -1;

if (x.getName().compareTo(y.getName()) <0 )

return 1;

return 0;

}

public static void main(String[] args) {

Set<Customer > set = new TreeSet<Customer>( new CustomerComparator()) ;

Customer customer1 = new Customer ("Tom",15);

Customer customer2 = new Customer ("Jack",16);

Customer customer3 = new Customer ("Mary",26);

set.add(customer1);

set.add(customer2);

set.add(customer3);

Iterator<Customer > it = set.iterator();

while (it.hasNext()){

Customer customer = it.next();

System.out .println(customer.getName()+" "+customer.getAge());

}

}

}

四、List(列表)

1. List中的元素以線性方式存儲,集合中允許存放重複對象。List接口的主要的實現類有ArrayList(長度可變的數組)和 LinkedList(鏈表)。並且LinkedList單獨具有addFirst()、addLast()、getFirst()、 getLast()、removeFirst()、removeLast()方法,這些方法使得LinkedList可以作爲堆棧、隊列和雙向隊列來使 用。

2. List只能對集合中的對象按索引位置排序,如果想要對List中的對象按其他特定方式排序,可以藉助Comparator接口和Collections類中的sort方法。

3. List的listIterator()方法返回一個ListIterator對象,ListIterator接口繼承了Iterator接口,此外還提供了專門操縱列表的方法:

add()

向列表中插入一個元素

hasNext()

判斷列表中是否還有下一個元素

hasPrevious()

判斷列表中是否還有上一個元素

next()

返回列表中的下一個元素

previous()

返回列表中的上一個元素

4. java.util.Arrays類的asList()方法能夠把一個java數組包裝爲一個List對象,這個List對象代表固定長度的數組,所有對 List對象的操作都會被作用到底層的java數組,因此不能調用這種List對象的add()和remove()方法。

五、Map(映射)

1. Map的entrySet()方法返回一個Set集合,在這個集合中存放了Map.Entry類型的元素,每個Map.Entry對象代表Map中的一對鍵與值。

2. Map有兩種比較常用的實現,HashMap和TreeMap,另外還有以鏈表和哈希表爲基礎實現的LinkedHashMap類。使用HashMap 時,改寫了equals()方法時,同時要改寫hashCode()方法;TreeMap實現了SortedMap接口,能對鍵對象進行排序,支持自然排 序和客戶化排序。如果要對鍵進行客戶化排序,可調用它的TreeMap(Comparator comparator)構造方法,參數comparator指定具體的排序方式。

3. Map的keySet()方法返回集合中所有鍵對象的集合。

 

來自:http://www.cnblogs.com/jerrychoi/archive/2010/03/12/1684395.html

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