国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

程序人生——Java數(shù)組和集合使用建議(2)

這篇具有很好參考價(jià)值的文章主要介紹了程序人生——Java數(shù)組和集合使用建議(2)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

程序人生——Java數(shù)組和集合使用建議(2),# Java面試上岸專欄,程序人生,java,python

引出

程序人生——Java數(shù)組和集合使用建議(2)文章來源地址http://www.zghlxwxcb.cn/news/detail-841500.html


數(shù)組和集合

建議71:推薦使用subList處理局部列表

  • 需求:要?jiǎng)h除一個(gè)ArrayList中的20-30范圍內(nèi)的元素;將原列表轉(zhuǎn)換為一個(gè)可變列表,然后使用subList獲取到原列表20到30范圍內(nèi)的一個(gè)視圖(View),然后清空該視圖內(nèi)的元素,即可在原列表中刪除20到30范圍內(nèi)的元素

建議72:生成子列表后不要再操作原列表

  • subList生成子列表后,使用Collections.unmodifiableList(list);保持原列表的只讀狀態(tài))(利用subList生成子列表后,更改原列表,會(huì)造成子列表拋出java.util.ConcurrentModificationException異常。原因:subList取出的列表是原列表的一個(gè)視圖,原數(shù)據(jù)集(代碼中的list變量)修改了,但是subList取出的子列表不會(huì)重新生成一個(gè)新列表(這點(diǎn)與數(shù)據(jù)庫(kù)視圖是不相同的),后面再對(duì)子列表操作時(shí),就會(huì)檢測(cè)到修改計(jì)數(shù)器與預(yù)期的不相同,于是就拋出了并發(fā)修改異常

建議73:使用Comparator進(jìn)行排序

  • Comparable接口可以作為實(shí)現(xiàn)類的默認(rèn)排序法,Comparator接口則是一個(gè)類的擴(kuò)展排序工具)(兩種數(shù)據(jù)排序?qū)崿F(xiàn)方式:1、實(shí)現(xiàn)Comparable接口,必須要實(shí)現(xiàn)compareTo方法,一般由類直接實(shí)現(xiàn),表明自身是可比較的,有了比較才能進(jìn)行排序;2、實(shí)現(xiàn)Comparator接口,必須實(shí)現(xiàn)compare方法,Comparator接口是一個(gè)工具類接口:用作比較,它與原有類的邏輯沒有關(guān)系,只是實(shí)現(xiàn)兩個(gè)類的比較邏輯

建議74:不推薦使用binarySearch對(duì)列表進(jìn)行檢索

  • indexOf與binarySearch方法功能類似,只是使用了二分法搜索。使用二分查找的首要條件是必須要先排序,不然二分查找的值是不準(zhǔn)確的。indexOf方法直接就是遍歷搜尋。從性能方面考慮,binarySearch是最好的選擇

建議75:集合中的元素必須做到compareTo和equals同步

  • 實(shí)現(xiàn)了compareTo方法,就應(yīng)該覆寫equals方法,確保兩者同步)(在集合中indexOf方法是通過equals方法的返回值判斷的,而binarySearch查找的依據(jù)是compareTo方法的返回值;equals是判斷元素是否相等,compareTo是判斷元素在排序中的位置是否相同

建議76:集合運(yùn)算時(shí)使用更優(yōu)雅的方式

  • 1、并集:list1.addAll(list2);
  • 2、交集:list1.retainAll(list2);
  • 3、差集:list1.removeAll(list2);
  • 4、無重復(fù)的并集:list2.removeAll(list1);list1.addAll(list2);

建議77:使用shuffle打亂列表

  • 使用Collections.shuffle(tagClouds)打亂列表

建議78:減少HashMap中元素的數(shù)量

  • 盡量讓HashMap中的元素少量并簡(jiǎn)單)(**現(xiàn)象:**使用HashMap存儲(chǔ)數(shù)據(jù)時(shí),還有空閑內(nèi)存,卻拋出了內(nèi)存溢出異常;**原因:**HashMap底層的數(shù)組變量名叫table,它是Entry類型的數(shù)組,保存的是一個(gè)一個(gè)的鍵值對(duì)。與ArrayList集合相比,HashMap比ArrayList多了一次封裝,把String類型的鍵值對(duì)轉(zhuǎn)換成Entry對(duì)象后再放入數(shù)組,這就多了40萬個(gè)對(duì)象,這是問題產(chǎn)生的第一個(gè)原因;HashMap在插入鍵值對(duì)時(shí),會(huì)做長(zhǎng)度校驗(yàn),如果大于或等于閾值(threshold變量),則數(shù)組長(zhǎng)度增大一倍。默認(rèn)閾值是當(dāng)前長(zhǎng)度與加載因子的乘積,默認(rèn)的加載因子(loadFactor變量)是0.75,也就是說只要HashMap的size大于數(shù)組長(zhǎng)度的0.75倍時(shí),就開始擴(kuò)容。導(dǎo)致到最后,空閑的內(nèi)存空間不足以增加一次擴(kuò)容時(shí)就會(huì)拋出OutOfMemoryError異常

建議79:集合中的哈希碼不要重復(fù)

  • 列表查找不管是遍歷查找、鏈表查找或者是二分查找都不夠快。最快的是Hash開頭的集合(如HashMap、HashSet等類)查找,原理:根據(jù)hashCode定位元素在數(shù)組中的位置。HashMap的table數(shù)組存儲(chǔ)元素特點(diǎn):1、table數(shù)組的長(zhǎng)度永遠(yuǎn)是2的N次冪;2、table數(shù)組中的元素是Entry類型;3、table數(shù)組中的元素位置是不連續(xù)的;每個(gè)Entry都有一個(gè)next變量,它會(huì)指向下一個(gè)鍵值對(duì),用來鏈表的方式來處理Hash沖突的問題。如果Hash碼相同,則添加的元素都使用鏈表處理,在查找的時(shí)候這部分的性能與ArrayList性能差不多

建議80:多線程使用Vector或HashTable

  • Vector與ArrayList原理類似,只是是線程安全的,HashTable是HashMap的多線程版本。線程安全:基本所有的集合類都有一個(gè)叫快速失敗(Fail-Fast)的校驗(yàn)機(jī)制,當(dāng)一個(gè)集合在被多個(gè)線程修改并訪問時(shí),就可能出現(xiàn)ConcurrentModificationException異常,這是為了確保集合方法一致而設(shè)置的保護(hù)措施;實(shí)現(xiàn)原理是modCount修改計(jì)數(shù)器:如果在讀列表時(shí),modCount發(fā)生變化(也就是有其他線程修改)則會(huì)拋出ConcurrentModificationException異常。**線程同步:**是為了保護(hù)集合中的數(shù)據(jù)不被臟讀、臟寫而設(shè)置的

建議81:非穩(wěn)定排序推薦使用List

  • 非穩(wěn)定的意思是:經(jīng)常需要改動(dòng);TreeSet集合中元素不可重復(fù),且默認(rèn)按照升序排序,是根據(jù)Comparable接口的compareTo方法的返回值確定排序位置的。SortedSet接口(TreeSet實(shí)現(xiàn)了該接口)只是定義了在該集合加入元素時(shí)將其進(jìn)行排序,并不能保證元素修改后的排序結(jié)果。因此TreeSet適用于不變量的集合數(shù)據(jù)排序,但不適合可變量的排序。對(duì)于可變量的集合,需要自己手動(dòng)進(jìn)行再排序)(SortedSet中的元素被修改后可能會(huì)影響其排序位置

建議82:由點(diǎn)及面,一頁知秋—集合大家族

  • List:實(shí)現(xiàn)List接口的集合主要有:ArrayList、LinkedList、Vector、Stack,其中ArrayList是一個(gè)動(dòng)態(tài)數(shù)組,LinkedList是一個(gè)雙向鏈表,Vector是一個(gè)線程安全的動(dòng)態(tài)數(shù)組,Stack是一個(gè)對(duì)象棧,遵循先進(jìn)后出的原則;
  • Set:Set是不包含重復(fù)元素的集合,其主要的實(shí)現(xiàn)類有:EnumSet、HashSet、TreeSet,其中EnumSet是枚舉類型的專用Set,HashSet是以哈希碼決定其元素位置的Set,原理與HashMap相似,提供快速插入與查找方法,TreeSet是一個(gè)自動(dòng)排序的Set,它實(shí)現(xiàn)了SortedSet接口;
  • Map:可以分為排序Map和非排序Map;排序Map為TreeMap,根據(jù)Key值進(jìn)行自動(dòng)排序;非排序Map主要包括:HashMap、HashTable、Properties、EnumMap等,其中Properties是HashTable的子類,EnumMap則要求其Key必須是某一個(gè)枚舉類型;
  • Queue:分為兩類,一類是阻塞式隊(duì)列,隊(duì)列滿了以后再插入元素會(huì)拋異常,主要包括:ArrayBlockingQueue、PriorityBlockingQueue、LinkedBlockingQueue,其中ArrayBlockingQueue是以數(shù)組方式實(shí)現(xiàn)的有界阻塞隊(duì)列;PriorityBlockingQueue是依照優(yōu)先級(jí)組件的隊(duì)列;LinkedBlockingQueue是通過鏈表實(shí)現(xiàn)的阻塞隊(duì)列;另一類是非阻塞隊(duì)列,無邊界的,只要內(nèi)存允許,都可以追加元素,經(jīng)常使用的是PriorityQueue類。還有一種是雙端隊(duì)列,支持在頭、尾兩端插入和移除元素,主要實(shí)現(xiàn)類是:ArrayDeque、LinkedBlockingDeque、LinkedList;
  • 數(shù)組:數(shù)組能存儲(chǔ)基本類型,而集合不行;所有的集合底層存儲(chǔ)的都是數(shù)組;
  • 工具類:數(shù)組的工具類是:java.util.Arrays和java.lang.reflect.array;集合的工具類是java.util.Collections;
  • 擴(kuò)展類:可以使用Apache的commons-collections擴(kuò)展包,也可以使用Google的google-collections擴(kuò)展包

深入認(rèn)識(shí)JVM

JVM內(nèi)存分配,類加載

Java進(jìn)階(1)——JVM的內(nèi)存分配 & 反射Class類的類對(duì)象 & 創(chuàng)建對(duì)象的幾種方式 & 類加載(何時(shí)進(jìn)入內(nèi)存JVM)& 注解 & 反射+注解的案例

程序人生——Java數(shù)組和集合使用建議(2),# Java面試上岸專欄,程序人生,java,python

創(chuàng)建對(duì)象的4種方法總結(jié)

Java進(jìn)階(4)——結(jié)合類加載JVM的過程理解創(chuàng)建對(duì)象的幾種方式:new,反射Class,克隆clone(拷貝),序列化反序列化

程序人生——Java數(shù)組和集合使用建議(2),# Java面試上岸專欄,程序人生,java,python

垃圾回收GC

程序人生——Java數(shù)組和集合使用建議(2),# Java面試上岸專欄,程序人生,java,python

Java進(jìn)階(垃圾回收GC)——理論篇:JVM內(nèi)存模型 & 垃圾回收定位清除算法 & JVM中的垃圾回收器

簡(jiǎn)介:本篇博客介紹JVM的內(nèi)存模型,對(duì)比了1.7和1.8的內(nèi)存模型的變化;介紹了垃圾回收的語言發(fā)展;闡述了定位垃圾的方法,引用計(jì)數(shù)法和可達(dá)性分析發(fā)以及垃圾清除算法;然后介紹了Java中的垃圾回收器,由串行、到并行再到并發(fā),最后到G1的演變;最后給出了垃圾回收器的對(duì)比和使用指引。

JVM調(diào)優(yōu),Arthas使用

  • Java進(jìn)階(JVM調(diào)優(yōu))——阿里云的Arthas的使用 & 安裝和使用 & 死鎖查找案例,重新加載案例,慢調(diào)用分析
  • Java進(jìn)階(JVM調(diào)優(yōu))——JVM調(diào)優(yōu)參數(shù) & JDK自帶工具使用 & 內(nèi)存溢出和死鎖問題案例 & GC垃圾回收

程序人生——Java數(shù)組和集合使用建議(2),# Java面試上岸專欄,程序人生,java,python

程序人生——Java數(shù)組和集合使用建議(2),# Java面試上岸專欄,程序人生,java,python

程序人生——Java數(shù)組和集合使用建議(2),# Java面試上岸專欄,程序人生,java,python

認(rèn)識(shí)多線程

創(chuàng)建多線程方法+了解線程池

Java進(jìn)階(5)——?jiǎng)?chuàng)建多線程的方法extends Thread和implements Runnable的對(duì)比 & 線程池及常用的線程池

程序人生——Java數(shù)組和集合使用建議(2),# Java面試上岸專欄,程序人生,java,python

多線程下-1非原子性問題即解決

Java進(jìn)階(6)——搶購(gòu)問題中的數(shù)據(jù)不安全(非原子性問題)& Java中的synchronize和ReentrantLock鎖使用 & 死鎖及其產(chǎn)生的條件

程序人生——Java數(shù)組和集合使用建議(2),# Java面試上岸專欄,程序人生,java,python

再論線程,創(chuàng)建、生命周期

Java進(jìn)階(再論線程)——線程的4種創(chuàng)建方式 & 線程的生命周期 & 線程的3大特性 & 集合中的線程安全問題

主要內(nèi)容:
1.線程創(chuàng)建的方式,繼承Thread類,實(shí)現(xiàn)Runable接口,實(shí)現(xiàn)Callable接口,采用線程池;
2.線程生命周期: join():運(yùn)行結(jié)束再下一個(gè), yield():暫時(shí)讓出cpu的使用權(quán),deamon():守護(hù)線程,最后結(jié)束,sleep():如果有鎖,不會(huì)讓出;
3.線程3大特性,原子性,可見性,有序性;
4.list集合中線程安全問題,hash算法問題;


總結(jié)

程序人生——Java數(shù)組和集合使用建議(2)

到了這里,關(guān)于程序人生——Java數(shù)組和集合使用建議(2)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 程序人生(CSAPP大作業(yè))

    程序人生(CSAPP大作業(yè))

    摘? 要 本文介紹了 Hello 程序的生命周期。本文通過對(duì)Hello在Linux下的預(yù)處理、編譯、匯編、鏈接等進(jìn)程的分析,詳細(xì)講解了一個(gè)程序從誕生到執(zhí)行再到消亡的典型過程。雖然程序執(zhí)行的過程在程序員眼中只是屏幕上顯示的一根字符串,但在短短的幾毫秒內(nèi),程序經(jīng)歷了預(yù)處理

    2023年04月24日
    瀏覽(28)
  • 雷軍:我的程序人生路

    今天有朋友發(fā)給我一篇我在20年前在BBS上寫的帖子。那還是1996年,我們通過電話線撥號(hào)連接到西點(diǎn)BBS上飆帖子玩的年代。那是一個(gè)互聯(lián)網(wǎng)混沌初開的年代,那是一個(gè)BBS和Email幾乎主宰了全部互聯(lián)網(wǎng)的年代,那是一個(gè)青春的理想和熱血沸騰的年代。 我是一個(gè)程序員,一個(gè)軟件工

    2024年02月04日
    瀏覽(95)
  • 哈工大CSAPP程序人生大作業(yè)

    正在上傳…重新上傳取消 計(jì)算機(jī)系統(tǒng) 大作業(yè) 題 ????目 ? 程序人生 -Hello’s P2P? 專?????? 業(yè) ?? 計(jì)算機(jī)科學(xué)與技術(shù) ?????? 學(xué) ?? 號(hào) ??2021110991???????????? 班 ?? 級(jí) ?????2103101???????????? 學(xué)?????? 生 ??????? 安心 ????????? 指 導(dǎo) 教 師 ???

    2023年04月24日
    瀏覽(25)
  • C羅老矣,我的程序人生還有多遠(yuǎn)

    C羅老矣,我的程序人生還有多遠(yuǎn)

    ☆ 隨著12月11號(hào)摩洛哥1-0葡萄牙比賽的結(jié)束,不僅說明葡萄牙對(duì)要結(jié)束本屆卡塔爾世界杯了,就連C羅此生的世界杯之旅也將畫上句號(hào)了。 ☆ 37歲的球星本該是人生最璀璨的階段,但在足球生涯中,這已經(jīng)是大齡了。不禁讓我想到,身為開發(fā)的我,也大概類似吧。 ? 目錄 ?1、

    2024年01月16日
    瀏覽(29)
  • 【程序人生】如何在工作中保持穩(wěn)定的情緒?

    【程序人生】如何在工作中保持穩(wěn)定的情緒?

    在工作中保持穩(wěn)定的情緒是現(xiàn)代生活中一個(gè)備受關(guān)注的話題。隨著職場(chǎng)壓力和工作挑戰(zhàn)的增加,我們常常發(fā)現(xiàn)自己情緒波動(dòng)不定,甚至受到負(fù)面情緒的困擾。然而,保持穩(wěn)定的情緒對(duì)于我們的工作效率、人際關(guān)系和整體幸福感都至關(guān)重要。 無論你是一位職場(chǎng)新人還是一位資深

    2024年02月15日
    瀏覽(30)
  • 【程序人生】上海城市開發(fā)者社區(qū)小聚有感

    【程序人生】上海城市開發(fā)者社區(qū)小聚有感

    ??作者簡(jiǎn)介: 小明java問道之路 , 2022年度博客之星全國(guó)TOP3 ,專注于后端、中間件、計(jì)算機(jī)底層、架構(gòu)設(shè)計(jì)演進(jìn)與穩(wěn)定性建設(shè)優(yōu)化,文章內(nèi)容兼具廣度、深度、大廠技術(shù)方案,對(duì)待技術(shù)喜歡推理加驗(yàn)證,就職于知名金融公司后端高級(jí)工程師。 ? ? ? ?? ?? 熱衷分享,喜歡原

    2024年02月06日
    瀏覽(27)
  • 程序人生 | 編程的上帝視角應(yīng)該怎么去找

    程序人生 | 編程的上帝視角應(yīng)該怎么去找

    ? 前言 ?? 作者簡(jiǎn)介 :小明java問道之路,專注于Linux內(nèi)核/匯編/HotSpot/C++/Java/源碼/架構(gòu)/算法 就職于大型金融公司后端高級(jí)工程師,擅長(zhǎng)交易領(lǐng)域的高安全/可用/并發(fā)/性能的架構(gòu)設(shè)計(jì)??? ?? CSDN專家博主/Java優(yōu)質(zhì)創(chuàng)作者/CSDN內(nèi)容合伙人 、InfoQ簽約作者 、阿里云專家/簽約博主、

    2023年04月24日
    瀏覽(35)
  • 【程序人生】還記得當(dāng)初自己為什么選擇計(jì)算機(jī)?

    【程序人生】還記得當(dāng)初自己為什么選擇計(jì)算機(jī)?

    ? ? ? ? 還記得人生中第一次接觸計(jì)算機(jī)編程是在高中,第一門編程語言是Python(很可惜由于條件限制的原因,當(dāng)時(shí)沒能堅(jiān)持學(xué)下去......現(xiàn)在想來有點(diǎn)后悔,沒能堅(jiān)持,唉......)。但是,錯(cuò)過的就錯(cuò)過了,把握當(dāng)前才是正確的選擇。努力最好的時(shí)機(jī)永遠(yuǎn)是在過去,其次就在當(dāng)

    2024年02月04日
    瀏覽(39)
  • 《人生苦短,我學(xué)Python》——第一個(gè)python程序

    《人生苦短,我學(xué)Python》——第一個(gè)python程序

    Hello!朋友們大家好,從今天開始,我們將學(xué)習(xí) Python 的相關(guān)內(nèi)容。 首先,讓我們來思考一個(gè)問題,編程是什么? 編程是人類與電腦溝通的過程,可以告訴電腦做什么以及怎么做。人類用編程構(gòu)建數(shù)字世界,比如網(wǎng)站、App、辦公軟件等等。 世界上有很多種編程語言,比如C,

    2024年02月11日
    瀏覽(24)
  • 人工智能AI時(shí)代:全棧程序員的人生規(guī)劃

    人工智能AI時(shí)代:全棧程序員的人生規(guī)劃

    博主 默語帶您 Go to New World. ? 個(gè)人主頁—— 默語 的博客???? 《java 面試題大全》 ??惟余輩才疏學(xué)淺,臨摹之作或有不妥之處,還請(qǐng)讀者海涵指正。??? 《MYSQL從入門到精通》數(shù)據(jù)庫(kù)是開發(fā)者必會(huì)基礎(chǔ)之一~ ?? 吾期望此文有資助于爾,即使粗淺難及深廣,亦備添少許微薄

    2024年02月11日
    瀏覽(48)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包