摘要:對象稱作迭代器,接口方法能以迭代方式逐個訪問集合中各個元素,并可以從中除去適當的元素。一相同點都是迭代器,當需要對集合中元素進行遍歷不需要干涉其遍歷過程時,這兩種迭代器都可以使用。
Collection接口
首先,看一下Collection集合的基本結構:
1.Collection是最基本集合接口,它定義了一組允許重復的對象。
2.Set接口繼承于Collection接口,它沒有提供額外的方法,但實現了Set接口的集合類中的元素是無序且不可重復。
3.List接口繼承于Collection接口,但是與Set接口恰恰相反,List接口的集合類中的元素是對象有序且可重復。
(1)LinkedList類:基于鏈表的數據結構,LinkedList不像ArrayList一樣,不需要改變數組的大小,也不需要在數組裝滿的時候要將所有的數據重新裝入一個新的數組,這是ArrayList最壞的一種情況,時間復雜度是O(n),而LinkedList中插入或刪除的時間復雜度僅為O(1),ArrayList在插入數據時還需要更新索引(除了插入數組的尾部)。
(2)ArrayList類:基于動態數組的數據結構,基于索引,使用索引在數組中搜索和讀取數據是很快的。Array獲取數據的時間復雜度是O(1),但是要刪除數據卻是開銷很大的,因為這需要重排數組中的所有數據。
**總結:
LinkedeList和ArrayList都實現了List接口,但是它們的工作原理卻不一樣。它們之間最主要的區別在于ArrayList是可改變大小的數組,而LinkedList是雙向鏈接串列(doubly LinkedList)。ArrayList更受歡迎,很多場景下ArrayList比LinkedList更為適用。**
4.Map接口沒有繼承Collection接口。該接口描述了從不重復的鍵到值的映射。Map接口用于維護鍵/值對(key/value pairs)。
特征:它描述了從不重復的鍵到值的映射。
兩個重要的實現類:HashMap和TreeMap。
(1)HashMap,中文叫散列表,基于哈希表實現,特點就是鍵值對的映射關系。一個key對應一個Value。HashMap中元素的排列順序是不固定的。更加適合于對元素進行插入、刪除和定位。
(2)TreeMap,基于紅黑書實現。TreeMap中的元素保持著某種固定的順序。更加適合于對元素的順序遍歷。
5.Comparable可以用于比較的實現,實現了Comparable接口的類可以通過實現comparaTo方法從而確定該類對象的排序方式。
6.所有實現了Collection接口的容器類都有iterator方法,用于返回一個實現了Iterator接口的對象。Iterator對象稱作迭代器,Iterator接口方法能以迭代方式逐個訪問集合中各個元素,并可以從Collection中除去適當的元素。
(1) 使用方法iterator()要求容器返回一個Iterator。第一次調用Iterator的next()方法時,它返回序列的第一個元素。注意:iterator()方法是java.lang.Iterable接口,被Collection繼承。
(2) 使用next()獲得序列中的下一個元素。
(3) 使用hasNext()檢查序列中是否還有元素。
(4) 使用remove()將迭代器新返回的元素刪除。
HashMap和HashTable的區別Java面試中的常見問題,用來考驗程序員是否能夠正確使用集合類以及是否可以隨機應變使用多種思路解決問題,主要的區別有:線程安全性,同步(synchronization),以及速度。
HashMap是非synchronized(并可以接受null),而HashTable是synchronized,這意味著HashTable是線程安全的,多個線程可以共享一個HashTable;而如果沒有正確的同步的話,多個線程是不能共享HashMap的。
HashMap的迭代器(Iterator)是fail-fast迭代器,而HashTable的enumerator迭代器不是fail-fast的。所以當有其它線程改變了HashMap的結構(增加或者移除元素),將會拋出ConcurrentModificationException,但迭代器本身的remove()方法移除元素則不會拋出ConcurrentModificationException異常。但這并不是一個一定發生的行為,要看JVM。這條同樣也是Enumeration和Iterator的區別。
由于HashTable是線程安全的也是synchronized,所以在單線程環境下它比HashMap要慢。如果你不需要同步,只需要單一線程,那么使用HashMap性能要好過HashTable。
HashMap不能保證隨著時間的推移Map中的元素次序是不變的。
ListIterator和Iterator假設集合List由四個元素List1、List2、List3和List4組成,當使用語句Iterator it =
List.Iterator()時,迭代器it指向的位置是上圖中Iterator1指向的位置,當執行語句it.next()之后,迭代器指向的位置后移到上圖Iterator2所指向的位置。
一.相同點
都是迭代器,當需要對集合中元素進行遍歷不需要干涉其遍歷過程時,這兩種迭代器都可以使用。
二.不同點
1.使用范圍不同
Iterator可以應用于所有的集合,Set、List和Map和這些集合的子類型;
ListIterator只能用于List及其子類型。
2.ListIterator有add方法,可以向List中添加對象,而Iterator不能。
3.ListIterator和Iterator都有hasNext()和next()方法,可以實現順序向后遍歷;
但是ListIterator有hasPrevious()和previous()方法,可以實現逆向(順序向前)遍歷。Iterator不可以。
4.ListIterator可以定位當前索引的位置,nextIndex()和previousIndex()可以實現。Iterator沒有此功能。
5.都可實現刪除操作,但是ListIterator可以實現對象的修改,set()方法可以實現。Iterator僅能遍歷,不能修改。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66109.html
摘要:集合框架的基本接口類層次結構其中表示接口,表示實現類和在實際開發中,需要將使用的對象存儲于特定數據結構的容器中。實例是迭代器,擁有兩個方法方法迭代器用于遍歷集合元素。返回值則是轉換后的數組,該數組會保存集合中的所有元素。 Java Collections Framework是Java提供的對集合進行定義,操作,和管理的包含一組接口,類的體系結構。 Java集合框架的基本接口/類層次結構...
摘要:單線程集合本部分將重點介紹非線程安全集合。非線程安全集合框架的最新成員是自起推出的。這是標準的單線程陣營中唯一的有序集合。該功能能有效防止運行時造型。檢查個集合之間不存在共同的元素。基于自然排序或找出集合中的最大或最小元素。 【編者按】本文作者為擁有十年金融軟件開發經驗的 Mikhail Vorontsov,文章主要概覽了所有標準 Java 集合類型。文章系國內 ITOM 管理平臺 O...
摘要:如果需要創建對象,則必須與一個被迭代的集合。這是一個有狀態的方法該方法用于保證對該流的后續訪問中最大允許訪問的元素個數。可以對集合元素進行整體的聚集操作。 Java集合分為Set(無序、不可重復)、List(有序、重復)、Queue(隊列)和Map(映射關系) Java集合概述 數組元素既可以是基本類型的值,也可以是對象(實際保存對象的引用變量)集合只能保存對象(實際保存對象的引用變量...
集合介紹 本節介紹Java集合框架,在這里,你將了解集合是什么以及它們如何使你的工作更輕松、程序更好,你將了解構成Java集合框架的核心元素 — 接口、實現、聚合操作和算法。 集合 — 有時稱為容器 — 只是一個將多個元素組合到一個單元中的對象,集合用于存儲、檢索、操作和傳遞聚合數據。通常,它們代表形成自然組的數據項,例如撲克牌(卡片集合)、郵件文件夾(信件集合)或電話目錄(名稱到電話號碼的映射)...
摘要:第三階段常見對象的學習集合框架概述和集合的遍歷一集合框架的概述集合的由來如果一個程序只包含固定數量的且其生命周期都是已知的對象,那么這是一個非常簡單的程序。進而它們的遍歷方式也應該是不同的,最終就沒有定義迭代器類。 第三階段 JAVA常見對象的學習 集合框架概述和集合的遍歷 (一) 集合框架的概述 (1) 集合的由來 如果一個程序只包含固定數量的且其生命周期都是已知的對象,那么這是一...
閱讀 1675·2021-11-15 11:37
閱讀 3408·2021-09-28 09:44
閱讀 1649·2021-09-07 10:15
閱讀 2784·2021-09-03 10:39
閱讀 2687·2019-08-29 13:20
閱讀 1291·2019-08-29 12:51
閱讀 2204·2019-08-26 13:44
閱讀 2125·2019-08-23 18:02