標籤:iterator comparable comparator 迭代器 比較子
1. Iterator迭代器
所有Collection的實作類別都實現了iterator方法,該方法返回一個Iterator介面類型的對象,用於實現對集合元素迭代的便利。在java.util包下。
1)Iterator定義有三個方法:
①boolean hasNext()方法:判斷指標後面是否有元素。
②E next()方法:指標後移,並返回當前元素。E代表泛型,預設為Object類型。
③void remove()方法:在原集合中刪除剛剛返回的元素。
2)對於List集合而言,可以通過基於下標的get方法進行遍曆;而iterator方法是針對Collection介面設計的,所以,所有實現了Collection介面的類,都可以使用Iterator實現迭代遍曆。
3)迭代器的使用方式:先問後拿。問:boolean hasNext()該方法詢問迭代器當前集合是否還有元素;拿:E next()該方法會擷取當前元素。迭代器的迭代方法是while迴圈量身定製的。
4)迭代器中的刪除問題:在迭代器迭代的過程中,我們不能通過“集合”的增刪等操作,來改變該集合的元素數量!否則會引發迭代異常!若想刪除迭代出來的元素,只能通過Iterator。迭代器在使用自己的remove()方法時,可以將剛剛擷取的元素從集合中刪除,但是不能重複調用兩次!即在不迭代的情況下,不能在一個位置刪兩次。
案例9:
650) this.width=650;" style="width:668px;height:478px;" title="09 clipboard.png" src="http://s3.51cto.com/wyfs02/M01/6E/F8/wKiom1WNFvKxg5yAAAKAJAVZKSg077.jpg" width="654" height="478" alt="wKiom1WNFvKxg5yAAAKAJAVZKSg077.jpg" />
2. Comparable和Comparator介面
(1) Comparable介面:Comparable介面用於表示對象間的大小關係,我們需要實現Comparable介面,並重寫compareTo()方法定義比較規則。
(2) Collections.sort()方法:需要集合中的對象實現Comparable介面,從而可以調用其compareTo方法判斷對象的大小,否則sort將無法判斷。該方法會依次調用集合中每個元素的compareTo方法,並進行自然排序。
案例10:
650) this.width=650;" style="width:678px;height:372px;" title="10 1 clipboard.png" src="http://s3.51cto.com/wyfs02/M02/6E/F8/wKiom1WNGamyEHIoAAHq91rkzY0951.jpg" width="715" height="336" alt="wKiom1WNGamyEHIoAAHq91rkzY0951.jpg" />
650) this.width=650;" title="10 2 clipboard.png" src="http://s3.51cto.com/wyfs02/M00/6E/F4/wKioL1WNG36ztdQWAAGE_hyCnB0496.jpg" width="678" height="297" alt="wKioL1WNG36ztdQWAAGE_hyCnB0496.jpg" />
650) this.width=650;" style="width:680px;height:65px;" title="10 3 clipboard.png" src="http://s3.51cto.com/wyfs02/M01/6E/F8/wKiom1WNGfTSb2eSAABZfC9wijE684.jpg" width="664" height="61" alt="wKiom1WNGfTSb2eSAABZfC9wijE684.jpg" />
(3) Comparator介面:比較子。一旦Java類實現了Comparable,其比較邏輯就已經確定了,如果希望在排序中的操作按照“臨時指定規則”,即自訂比較規則。可以採用Comparator介面回調方式。使用匿名類方式建立一個執行個體來定義比較子的方式很常見。
Comparator比較子建立步驟:
①定義一個類並實現Comparator介面。
②實現介面中的抽象方法compare(E o1,E o2)。
③執行個體化這個比較子
④調用Collections的重載方法:sort(Collection c,Comparator comparator)進行排序。
案例11:
650) this.width=650;" style="width:651px;height:391px;" title="11 clipboard.png" src="http://s3.51cto.com/wyfs02/M02/6E/F4/wKioL1WNG9uxf7NNAAJZkNLZPlo765.jpg" width="681" height="417" alt="wKioL1WNG9uxf7NNAAJZkNLZPlo765.jpg" />
3. Collection和Collentions的區別
Collection是java.util下的介面,它是各種集合的父介面,繼承於它的介面主要有Set 和List;
Collections是個java.util下的類,是針對集合的協助類,提供一系列靜態方法實現對各種集合的搜尋、排序、安全執行緒化等操作。
本文出自 “永遠年輕” 部落格,請務必保留此出處http://kingkongzhao.blog.51cto.com/6319491/1666023
Java核心API -- 7(Iterator迭代器、Comparable、Comparator比較子)