成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java-集合

happen / 3352人閱讀

摘要:對(duì)象稱作迭代器,接口方法能以迭代方式逐個(gè)訪問(wèn)集合中各個(gè)元素,并可以從中除去適當(dāng)?shù)脑亍R幌嗤c(diǎn)都是迭代器,當(dāng)需要對(duì)集合中元素進(jìn)行遍歷不需要干涉其遍歷過(guò)程時(shí),這兩種迭代器都可以使用。

Collection接口

首先,看一下Collection集合的基本結(jié)構(gòu):

1.Collection是最基本集合接口,它定義了一組允許重復(fù)的對(duì)象。

2.Set接口繼承于Collection接口,它沒(méi)有提供額外的方法,但實(shí)現(xiàn)了Set接口的集合類中的元素是無(wú)序且不可重復(fù)

3.List接口繼承于Collection接口,但是與Set接口恰恰相反,List接口的集合類中的元素是對(duì)象有序且可重復(fù)
(1)LinkedList類:基于鏈表的數(shù)據(jù)結(jié)構(gòu),LinkedList不像ArrayList一樣,不需要改變數(shù)組的大小,也不需要在數(shù)組裝滿的時(shí)候要將所有的數(shù)據(jù)重新裝入一個(gè)新的數(shù)組,這是ArrayList最壞的一種情況,時(shí)間復(fù)雜度是O(n),而LinkedList中插入或刪除的時(shí)間復(fù)雜度僅為O(1),ArrayList在插入數(shù)據(jù)時(shí)還需要更新索引(除了插入數(shù)組的尾部)。

(2)ArrayList類:基于動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),基于索引,使用索引在數(shù)組中搜索和讀取數(shù)據(jù)是很快的。Array獲取數(shù)據(jù)的時(shí)間復(fù)雜度是O(1),但是要?jiǎng)h除數(shù)據(jù)卻是開(kāi)銷很大的,因?yàn)檫@需要重排數(shù)組中的所有數(shù)據(jù)。

**總結(jié):
LinkedeList和ArrayList都實(shí)現(xiàn)了List接口,但是它們的工作原理卻不一樣。它們之間最主要的區(qū)別在于ArrayList是可改變大小的數(shù)組,而LinkedList是雙向鏈接串列(doubly LinkedList)。ArrayList更受歡迎,很多場(chǎng)景下ArrayList比LinkedList更為適用。**

4.Map接口沒(méi)有繼承Collection接口。該接口描述了從不重復(fù)的鍵到值的映射。Map接口用于維護(hù)鍵/值對(duì)(key/value pairs)。
特征:它描述了從不重復(fù)的鍵到值的映射。

兩個(gè)重要的實(shí)現(xiàn)類:HashMap和TreeMap。

(1)HashMap,中文叫散列表,基于哈希表實(shí)現(xiàn),特點(diǎn)就是鍵值對(duì)的映射關(guān)系。一個(gè)key對(duì)應(yīng)一個(gè)Value。HashMap中元素的排列順序是不固定的。更加適合于對(duì)元素進(jìn)行插入、刪除和定位。

(2)TreeMap,基于紅黑書實(shí)現(xiàn)。TreeMap中的元素保持著某種固定的順序。更加適合于對(duì)元素的順序遍歷。

5.Comparable可以用于比較的實(shí)現(xiàn),實(shí)現(xiàn)了Comparable接口的類可以通過(guò)實(shí)現(xiàn)comparaTo方法從而確定該類對(duì)象的排序方式。

6.所有實(shí)現(xiàn)了Collection接口的容器類都有iterator方法,用于返回一個(gè)實(shí)現(xiàn)了Iterator接口的對(duì)象。Iterator對(duì)象稱作迭代器,Iterator接口方法能以迭代方式逐個(gè)訪問(wèn)集合中各個(gè)元素,并可以從Collection中除去適當(dāng)?shù)脑亍?/p>

(1) 使用方法iterator()要求容器返回一個(gè)Iterator。第一次調(diào)用Iterator的next()方法時(shí),它返回序列的第一個(gè)元素。注意:iterator()方法是java.lang.Iterable接口,被Collection繼承。

(2) 使用next()獲得序列中的下一個(gè)元素。

(3) 使用hasNext()檢查序列中是否還有元素。

(4) 使用remove()將迭代器新返回的元素刪除。

HashMap和HashTable的區(qū)別

Java面試中的常見(jiàn)問(wèn)題,用來(lái)考驗(yàn)程序員是否能夠正確使用集合類以及是否可以隨機(jī)應(yīng)變使用多種思路解決問(wèn)題,主要的區(qū)別有:線程安全性,同步(synchronization),以及速度。

HashMap是非synchronized(并可以接受null),而HashTable是synchronized,這意味著HashTable是線程安全的,多個(gè)線程可以共享一個(gè)HashTable;而如果沒(méi)有正確的同步的話,多個(gè)線程是不能共享HashMap的。

HashMap的迭代器(Iterator)是fail-fast迭代器,而HashTable的enumerator迭代器不是fail-fast的。所以當(dāng)有其它線程改變了HashMap的結(jié)構(gòu)(增加或者移除元素),將會(huì)拋出ConcurrentModificationException,但迭代器本身的remove()方法移除元素則不會(huì)拋出ConcurrentModificationException異常。但這并不是一個(gè)一定發(fā)生的行為,要看JVM。這條同樣也是Enumeration和Iterator的區(qū)別。

由于HashTable是線程安全的也是synchronized,所以在單線程環(huán)境下它比HashMap要。如果你不需要同步,只需要單一線程,那么使用HashMap性能要好過(guò)HashTable。

HashMap不能保證隨著時(shí)間的推移Map中的元素次序是不變的。

ListIterator和Iterator

假設(shè)集合List由四個(gè)元素List1、List2、List3和List4組成,當(dāng)使用語(yǔ)句Iterator it =
List.Iterator()時(shí),迭代器it指向的位置是上圖中Iterator1指向的位置,當(dāng)執(zhí)行語(yǔ)句it.next()之后,迭代器指向的位置后移到上圖Iterator2所指向的位置。

一.相同點(diǎn)

都是迭代器,當(dāng)需要對(duì)集合中元素進(jìn)行遍歷不需要干涉其遍歷過(guò)程時(shí),這兩種迭代器都可以使用。

二.不同點(diǎn)

1.使用范圍不同
Iterator可以應(yīng)用于所有的集合,Set、List和Map和這些集合的子類型;
ListIterator只能用于List及其子類型。

2.ListIterator有add方法,可以向List中添加對(duì)象,而Iterator不能。

3.ListIterator和Iterator都有hasNext()和next()方法,可以實(shí)現(xiàn)順序向后遍歷;
但是ListIterator有hasPrevious()和previous()方法,可以實(shí)現(xiàn)逆向(順序向前)遍歷。Iterator不可以。

4.ListIterator可以定位當(dāng)前索引的位置,nextIndex()和previousIndex()可以實(shí)現(xiàn)。Iterator沒(méi)有此功能。

5.都可實(shí)現(xiàn)刪除操作,但是ListIterator可以實(shí)現(xiàn)對(duì)象的修改,set()方法可以實(shí)現(xiàn)。Iterator僅能遍歷,不能修改。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66109.html

相關(guān)文章

  • 集合概要學(xué)習(xí)---粗略

    摘要:集合框架的基本接口類層次結(jié)構(gòu)其中表示接口,表示實(shí)現(xiàn)類和在實(shí)際開(kāi)發(fā)中,需要將使用的對(duì)象存儲(chǔ)于特定數(shù)據(jù)結(jié)構(gòu)的容器中。實(shí)例是迭代器,擁有兩個(gè)方法方法迭代器用于遍歷集合元素。返回值則是轉(zhuǎn)換后的數(shù)組,該數(shù)組會(huì)保存集合中的所有元素。 Java Collections Framework是Java提供的對(duì)集合進(jìn)行定義,操作,和管理的包含一組接口,類的體系結(jié)構(gòu)。 Java集合框架的基本接口/類層次結(jié)構(gòu)...

    DesGemini 評(píng)論0 收藏0
  • Java 性能調(diào)優(yōu)指南之 Java 集合概覽

    摘要:?jiǎn)尉€程集合本部分將重點(diǎn)介紹非線程安全集合。非線程安全集合框架的最新成員是自起推出的。這是標(biāo)準(zhǔn)的單線程陣營(yíng)中唯一的有序集合。該功能能有效防止運(yùn)行時(shí)造型。檢查個(gè)集合之間不存在共同的元素?;谧匀慌判蚧蛘页黾现械淖畲蠡蜃钚≡?。 【編者按】本文作者為擁有十年金融軟件開(kāi)發(fā)經(jīng)驗(yàn)的 Mikhail Vorontsov,文章主要概覽了所有標(biāo)準(zhǔn) Java 集合類型。文章系國(guó)內(nèi) ITOM 管理平臺(tái) O...

    gnehc 評(píng)論0 收藏0
  • Java 集合 Collection、Iterator

    摘要:如果需要?jiǎng)?chuàng)建對(duì)象,則必須與一個(gè)被迭代的集合。這是一個(gè)有狀態(tài)的方法該方法用于保證對(duì)該流的后續(xù)訪問(wèn)中最大允許訪問(wèn)的元素個(gè)數(shù)??梢詫?duì)集合元素進(jìn)行整體的聚集操作。 Java集合分為Set(無(wú)序、不可重復(fù))、List(有序、重復(fù))、Queue(隊(duì)列)和Map(映射關(guān)系) Java集合概述 數(shù)組元素既可以是基本類型的值,也可以是對(duì)象(實(shí)際保存對(duì)象的引用變量)集合只能保存對(duì)象(實(shí)際保存對(duì)象的引用變量...

    harryhappy 評(píng)論0 收藏0
  • Java? 教程(集合介紹)

    集合介紹 本節(jié)介紹Java集合框架,在這里,你將了解集合是什么以及它們?nèi)绾问鼓愕墓ぷ鞲p松、程序更好,你將了解構(gòu)成Java集合框架的核心元素 — 接口、實(shí)現(xiàn)、聚合操作和算法。 集合 — 有時(shí)稱為容器 — 只是一個(gè)將多個(gè)元素組合到一個(gè)單元中的對(duì)象,集合用于存儲(chǔ)、檢索、操作和傳遞聚合數(shù)據(jù)。通常,它們代表形成自然組的數(shù)據(jù)項(xiàng),例如撲克牌(卡片集合)、郵件文件夾(信件集合)或電話目錄(名稱到電話號(hào)碼的映射)...

    taoszu 評(píng)論0 收藏0
  • java源碼

    摘要:集合源碼解析回歸基礎(chǔ),集合源碼解析系列,持續(xù)更新和源碼分析與是兩個(gè)常用的操作字符串的類。這里我們從源碼看下不同狀態(tài)都是怎么處理的。 Java 集合深入理解:ArrayList 回歸基礎(chǔ),Java 集合深入理解系列,持續(xù)更新~ JVM 源碼分析之 System.currentTimeMillis 及 nanoTime 原理詳解 JVM 源碼分析之 System.currentTimeMi...

    Freeman 評(píng)論0 收藏0
  • Java集合框架概述和集合的遍歷

    摘要:第三階段常見(jiàn)對(duì)象的學(xué)習(xí)集合框架概述和集合的遍歷一集合框架的概述集合的由來(lái)如果一個(gè)程序只包含固定數(shù)量的且其生命周期都是已知的對(duì)象,那么這是一個(gè)非常簡(jiǎn)單的程序。進(jìn)而它們的遍歷方式也應(yīng)該是不同的,最終就沒(méi)有定義迭代器類。 第三階段 JAVA常見(jiàn)對(duì)象的學(xué)習(xí) 集合框架概述和集合的遍歷 (一) 集合框架的概述 (1) 集合的由來(lái) 如果一個(gè)程序只包含固定數(shù)量的且其生命周期都是已知的對(duì)象,那么這是一...

    happyhuangjinjin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<