一、總結
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