亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

關(guān)于java集合框架的總結(jié)

Coding01 / 1903人閱讀

摘要:是哈希表實(shí)現(xiàn)的,中的數(shù)據(jù)是無(wú)序的,可以放入,但只能放入一個(gè),兩者中的值都不能重復(fù),就如數(shù)據(jù)庫(kù)中唯一約束。四和的相同點(diǎn)和區(qū)別相同兩者都是基于哈希表實(shí)現(xiàn)的內(nèi)部也都是通過(guò)單鏈表解決沖突問(wèn)題同樣實(shí)現(xiàn)了序列化和克隆接口區(qū)別繼承的父類不同。

一.Arraylist與LinkedList有什么區(qū)別?

1、ArrayList是實(shí)現(xiàn)了基于動(dòng)態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),因?yàn)榈刂愤B續(xù),一旦數(shù)據(jù)存儲(chǔ)好了,查詢操作效率會(huì)比較高,但是插入和刪除操作效率比較低。
2、LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu),地址是任意的,所以在開(kāi)辟內(nèi)存空間的時(shí)候不需要等一個(gè)連續(xù)的地址,所以增刪的時(shí)候其它元素的位置不用移動(dòng),增刪效率高,但查詢時(shí)通過(guò)指針移動(dòng)查找,所以查詢效率低

二.ArrayList與Vector的區(qū)別?

1.線程安全問(wèn)題,vector是java早期就有的,是線程安全的;arraylist是java2才出現(xiàn),是線程不安全的。因?yàn)関ector支持多線程操作,所以性能上比不上arraylist
2.集合擴(kuò)充問(wèn)題,vector擴(kuò)容默認(rèn)增加原來(lái)的一倍,Arraylist默認(rèn)增加原來(lái)的0.5倍
(vector可以由我們自己設(shè)置增長(zhǎng)的大小,arraylist沒(méi)有提供相關(guān)方法

三.HashSet與TreeSet有什么區(qū)別?

1.TreeSet 是二叉樹(shù)實(shí)現(xiàn)的,Treeset中的數(shù)據(jù)是自動(dòng)排好序的,不允許放入null值 。
2.HashSet 是哈希表實(shí)現(xiàn)的,HashSet中的數(shù)據(jù)是無(wú)序的,可以放入null,但只能放入一個(gè)null,兩者中的值都不能重復(fù),就如數(shù)據(jù)庫(kù)中唯一約束 。

四.hashmap和hashtable的相同點(diǎn)和區(qū)別?

相同:
(1)兩者都是基于哈希表實(shí)現(xiàn)的
(2)內(nèi)部也都是通過(guò)單鏈表解決沖突問(wèn)題
(3)同樣實(shí)現(xiàn)了序列化和克隆接口

區(qū)別:
(1)繼承的父類不同。AbstractMap和dictionary
(2) 線程安全不同,hashmap不同步,hashtable同步
(3)是否提供contains方法,hashmap不提供contains方法而改成了containsValue和containskey避免誤解
(4)key和value是否允許null,前者允許(key為null時(shí)放在table[0]),后者不允許。
(5)hash值不同,hashtable直接使用對(duì)象的hashcode(),而hashmap重新計(jì)算hash,
(6)初始化容量不同,hashtable默認(rèn)容量11.hashmap16

五.hashmap存數(shù)據(jù)的過(guò)程?

hashmap內(nèi)部維護(hù)一個(gè)存儲(chǔ)數(shù)據(jù)的Entry數(shù)組,hashmap采用鏈表解決沖突,每一個(gè)Entry本質(zhì)上是一個(gè)單向鏈表,當(dāng)準(zhǔn)備添加一個(gè)鍵值對(duì)時(shí),首先通過(guò)hash(key)方法計(jì)算哈希值,然后通過(guò)indexFor(hash,length)求出對(duì)應(yīng)的存儲(chǔ)位置,然后插入該位置對(duì)應(yīng)的鏈表頭中

六.談?wù)刦ail-fast機(jī)制?

fial-fast機(jī)制是集合中的一種錯(cuò)誤機(jī)制,當(dāng)多個(gè)線程對(duì)同一個(gè)集合的內(nèi)容進(jìn)行操作時(shí),就可能發(fā)生fail-fast事件。例如一個(gè)線程對(duì)某個(gè)集合進(jìn)行訪問(wèn)的過(guò)程,該集合的內(nèi)容被其它線程修改了,就會(huì)拋出currentModificationException異常,產(chǎn)生fail-fast事件。
原理:每次調(diào)用next方法,在實(shí)際訪問(wèn)前,都會(huì)調(diào)用checkformodification方法,該方法會(huì)檢查當(dāng)前的Modcount值和預(yù)期的Modcount值是否相等,如果不等就會(huì)拋currentModificationException異常

七.怎樣避免fial-fast?

(1)在單線程遍歷過(guò)程中,如果要進(jìn)行remove操作,可以調(diào)用迭代器的remove方法而不是集合的remove方法,(因?yàn)榈鞯膔emove方法不能指定元素,只能remove當(dāng)前遍歷過(guò)的那個(gè)元素,所以調(diào)用該方法不會(huì)發(fā)生fail-fast現(xiàn)象)
(2)使用java并發(fā)包(java.util.concurrent)中的類來(lái)代替Arraylist和hashmap,比如CopyOnWriteArrayList(COW)寫(xiě)時(shí)復(fù)制容器,在讀寫(xiě)時(shí)是線程安全的,該容器在add,remove等操作時(shí),并不是在原數(shù)組上修改,而是在原數(shù)組上拷貝一份,在新數(shù)組上修改,待完成后才將舊數(shù)組的引用指向新數(shù)組。所以CopyOnWrite容器只能保證數(shù)據(jù)的最終一致性,并不能保證數(shù)據(jù)的實(shí)時(shí)一致性

八.實(shí)現(xiàn)數(shù)組拷貝的方法有哪些?速度怎么樣?

(1)從速度上看:System.arraycopy > clone > Arrays.copyOf > for
(2)for速度慢是因?yàn)槊看味家獜钠瘘c(diǎn)開(kāi)始尋找指定下標(biāo),并且每次循環(huán)都要判斷是否達(dá)到數(shù)組最大長(zhǎng)度
(3)system.arrayCopy()是一個(gè)native方法,(本地方法,即c/c++已經(jīng)編譯成機(jī)器碼的方法)

九.java中,一個(gè)二維數(shù)組是怎樣分配內(nèi)存空間的?

事實(shí)上,java中只有一維數(shù)組,二維數(shù)組其實(shí)就是一個(gè)存放了數(shù)組的數(shù)組,創(chuàng)建一個(gè)二維數(shù)組時(shí),一個(gè)數(shù)組對(duì)象所占的空間在堆上被分配,然后這個(gè)數(shù)組中的每一個(gè)元素空間又有一個(gè)引用指向另一個(gè)數(shù)組,這樣就構(gòu)成了一個(gè)二維數(shù)組

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

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

相關(guān)文章

  • Java 總結(jié)

    摘要:中的詳解必修個(gè)多線程問(wèn)題總結(jié)個(gè)多線程問(wèn)題總結(jié)有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升開(kāi)源的運(yùn)行原理從虛擬機(jī)工作流程看運(yùn)行原理。 自己實(shí)現(xiàn)集合框架 (三): 單鏈表的實(shí)現(xiàn) 自己實(shí)現(xiàn)集合框架 (三): 單鏈表的實(shí)現(xiàn) 基于 POI 封裝 ExcelUtil 精簡(jiǎn)的 Excel 導(dǎo)入導(dǎo)出 由于 poi 本身只是針對(duì)于 ...

    caspar 評(píng)論0 收藏0
  • Java相關(guān)

    摘要:本文是作者自己對(duì)中線程的狀態(tài)線程間協(xié)作相關(guān)使用的理解與總結(jié),不對(duì)之處,望指出,共勉。當(dāng)中的的數(shù)目而不是已占用的位置數(shù)大于集合番一文通版集合番一文通版垃圾回收機(jī)制講得很透徹,深入淺出。 一小時(shí)搞明白自定義注解 Annotation(注解)就是 Java 提供了一種元程序中的元素關(guān)聯(lián)任何信息和著任何元數(shù)據(jù)(metadata)的途徑和方法。Annotion(注解) 是一個(gè)接口,程序可以通過(guò)...

    wangtdgoodluck 評(píng)論0 收藏0
  • Java - 收藏集 - 掘金

    摘要:強(qiáng)大的表單驗(yàn)證前端掘金支持非常強(qiáng)大的內(nèi)置表單驗(yàn)證,以及。面向?qū)ο蠛兔嫦蜻^(guò)程的區(qū)別的種設(shè)計(jì)模式全解析后端掘金一設(shè)計(jì)模式的分類總體來(lái)說(shuō)設(shè)計(jì)模式分為三大類創(chuàng)建型模式,共五種工廠方法模式抽象工廠模式單例模式建造者模式原型模式。 強(qiáng)大的 Angular 表單驗(yàn)證 - 前端 - 掘金Angular 支持非常強(qiáng)大的內(nèi)置表單驗(yàn)證,maxlength、minlength、required 以及 patt...

    XiNGRZ 評(píng)論0 收藏0
  • Java技術(shù)面試“小抄”——集合類(實(shí)時(shí)更新)

    摘要:接口在類庫(kù)中有很多具體的實(shí)現(xiàn)。接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式。集合類框架的基本接口代表一組對(duì)象,每一個(gè)對(duì)象都是他的子元素不包含重復(fù)元素的有序的,可以包含重復(fù)元素將映射到的對(duì)象,不能重復(fù)。 寫(xiě)在之前: 這篇文章是自己面試過(guò)程中,總結(jié)出來(lái)的關(guān)于Java集合類的總結(jié)。每次面試之前來(lái)出來(lái)看看,速度快,也能很迅速的回憶一些細(xì)節(jié)問(wèn)題。發(fā)布這篇文章,不僅僅是希望大家臨陣磨槍,...

    Travis 評(píng)論0 收藏0
  • Java 學(xué)習(xí)路線之四個(gè)階段

    摘要:寫(xiě)這篇總結(jié),主要是記錄下自己的學(xué)習(xí)經(jīng)歷,算是自己對(duì)知識(shí)的一個(gè)回顧。這個(gè)階段學(xué)習(xí)的時(shí)候,要學(xué)會(huì)使用開(kāi)發(fā)工具,比如或者來(lái)學(xué)習(xí)。這個(gè)階段需要自己對(duì)自己有很強(qiáng)的自律去學(xué)習(xí),不要看了一半就放棄了。 showImg(https://segmentfault.com/img/bVbaNtw?w=1232&h=822); 寫(xiě)這篇總結(jié),主要是記錄下自己的學(xué)習(xí)經(jīng)歷,算是自己對(duì)知識(shí)的一個(gè)回顧。也給想要學(xué)習(xí) ...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<