Java學習總結之第十一章 Java集合

來源:互聯網
上載者:User
一、總結

1. 所有Java集合類都位於java.util包中,與Java數組不同,Java集合中不能存放基礎資料型別 (Elementary Data Type),只能存放對象的引用。

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

3. 在將Object Storage Service到集合類中時,為加快儲存速度,要求被在座對象的類中必須覆蓋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()方法返回集合中所有鍵對象的集合。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.