摘要:前言平時(shí)最常用的莫過(guò)于和了,面試的時(shí)候也是問(wèn)答的???。先不去管容量負(fù)載因子什么的,就是簡(jiǎn)單的使用也會(huì)遇到坑。元素經(jīng)常遇到的一個(gè)場(chǎng)景是遍歷然后找到合適條件的給刪除掉,比如刪除所有的偶數(shù)。文初的做法不報(bào)錯(cuò),但結(jié)果并不是我們想要的。
前言
平時(shí)最常用的莫過(guò)于ArrayList和HashMap了,面試的時(shí)候也是問(wèn)答的???。先不去管容量、負(fù)載因子什么的,就是簡(jiǎn)單的使用也會(huì)遇到坑。
Remove 元素經(jīng)常遇到的一個(gè)場(chǎng)景是:遍歷list, 然后找到合適條件的給刪除掉,比如刪除所有的偶數(shù)。
@Test public void testRemove2(){ Listintegers = new ArrayList<>(5); integers.add(1); integers.add(2); integers.add(2); integers.add(4); integers.add(5); for (int i = 0; i < integers.size(); i++) { if (integers.get(i)%2==0){ integers.remove(i); } } System.out.println(integers); }
看起來(lái)好像沒(méi)問(wèn)題,加入面試的時(shí)候當(dāng)面問(wèn):輸出結(jié)果是什么?再問(wèn)真不會(huì)報(bào)錯(cuò)嗎?再問(wèn)結(jié)果是什么?
報(bào)錯(cuò)
結(jié)果是空l(shuí)ist
結(jié)果是[1, 2, 5]
List.remove()有兩個(gè),一個(gè) public E remove(int index),一個(gè)是public boolean remove(Object o) ,那下面的結(jié)果是什么:@Test public void testRemove(){ ArrayListintegers = Lists.newArrayList(1, 2, 3, 4); System.out.println(integers); integers.remove(1); System.out.println(integers); }
[1, 3, 4]
經(jīng)常會(huì)使用一個(gè)Arrays.asList的API, 那么下面的結(jié)果是什么:@Test public void testRemove3(){ Listlist = Arrays.asList("a","b"); list.add("c"); System.out.println(list); }
報(bào)錯(cuò): java.lang.UnsupportedOperationException
使用foreach是否可以實(shí)現(xiàn)剛開(kāi)始的問(wèn)題@Test public void testRemove4(){ Liststrings = new ArrayList<>(); strings.add("a"); strings.add("b"); strings.add("c"); strings.add("d"); for (String string : strings) { strings.remove(string); } }
否,報(bào)錯(cuò)java.util.ConcurrentModificationException
為了性能問(wèn)題,我們推薦把list.size的計(jì)算提取出來(lái)@Test public void testRemove5(){ Liststrings = new ArrayList<>(); strings.add("a"); strings.add("b"); strings.add("c"); strings.add("d"); int size = strings.size(); for (int i = 0; i < size; i++) { strings.remove(i); } }
報(bào)錯(cuò): java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
這是很好的習(xí)慣, 不像開(kāi)頭那樣每次循環(huán)都計(jì)算一次size,而且按這種情況還可以再運(yùn)行的時(shí)候報(bào)錯(cuò)。文初的做法不報(bào)錯(cuò),但結(jié)果并不是我們想要的。
使用Iterator是不是就可以remove了@Test public void testRemove6(){ Liststrings = new ArrayList<>(); strings.add("a"); strings.add("b"); strings.add("c"); strings.add("d"); Iterator iterator = strings.iterator(); while (iterator.hasNext()){ String next = iterator.next(); strings.remove(next); } System.out.println(strings); }
報(bào)錯(cuò): java.util.ConcurrentModificationException
正確的remove做法是什么@Test public void testRemove7(){ Liststrings = new ArrayList<>(); strings.add("a"); strings.add("b"); strings.add("c"); strings.add("d"); Iterator iterator = strings.iterator(); while (iterator.hasNext()){ String next = iterator.next(); iterator.remove(); } System.out.println(strings); }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67643.html
摘要:引語(yǔ)阿里巴巴開(kāi)發(fā)規(guī)范說(shuō)到使用工具類(lèi)方法把數(shù)組轉(zhuǎn)換成集合時(shí)不能使用其修改集合相關(guān)的方法它的方法會(huì)拋出我們來(lái)看一下為什么會(huì)出現(xiàn)這種情況問(wèn)題分析我們做個(gè)測(cè)試被注釋的三行可以分別解開(kāi)注釋運(yùn)行后確實(shí)出現(xiàn)了規(guī)約中所說(shuō)的異常我們來(lái)看下做了什么操作看上去是 引語(yǔ): 阿里巴巴java開(kāi)發(fā)規(guī)范說(shuō)到使用工具類(lèi)Arrays.asList()方法把數(shù)組轉(zhuǎn)換成集合時(shí),不能使用其修改集合相關(guān)的方法,它的add/re...
摘要:用戶(hù)態(tài)不能干擾內(nèi)核態(tài)所以指令就有兩種特權(quán)指令和非特權(quán)指令不同的狀態(tài)對(duì)應(yīng)不同的指令。非特權(quán)指令所有程序均可直接使用。用戶(hù)態(tài)常態(tài)目態(tài)執(zhí)行非特權(quán)指令。 這是我今年從三月份開(kāi)始,主要的大廠面試經(jīng)過(guò),有些企業(yè)面試的還沒(méi)來(lái)得及整理,可能有些沒(méi)有帶答案就發(fā)出來(lái)了,還請(qǐng)各位先思考如果是你怎么回答面試官?這篇文章會(huì)持續(xù)更新,請(qǐng)各位持續(xù)關(guān)注,希望對(duì)你有所幫助! 面試清單 平安產(chǎn)險(xiǎn) 飛豬 上汽大通 浩鯨科...
摘要:根據(jù)拇指規(guī)則,最佳做法應(yīng)該是盡量減少屬性的訪問(wèn)級(jí)別。通常的,可變對(duì)象可用來(lái)避免產(chǎn)生過(guò)多的對(duì)象。如果類(lèi)中定義了構(gòu)造函數(shù),那么編譯器將不會(huì)給它插入默認(rèn)構(gòu)造函數(shù)。 1、轉(zhuǎn)化數(shù)組為ArrayList 通常開(kāi)發(fā)者轉(zhuǎn)化數(shù)組為ArrayList的方式為 List list = Arrays.asList(arr); Arrays.asList()會(huì)返回一個(gè)ArrayList,而這個(gè)ArrayList...
摘要:盡可能避免使用,會(huì)導(dǎo)致復(fù)制數(shù)組,降低效率。再額外提一點(diǎn),我們常用的另一個(gè)容器也是推薦要初始化長(zhǎng)度從而避免擴(kuò)容。 showImg(https://segmentfault.com/img/remote/1460000019659723); 前言 前不久幫同事一起 review 一個(gè) job 執(zhí)行緩慢的問(wèn)題時(shí)發(fā)現(xiàn)不少朋友在擼碼實(shí)現(xiàn)功能時(shí)還是有需要細(xì)節(jié)不夠注意,于是便有了這篇文章。 Arra...
摘要:加載因子是哈希表在其容量自動(dòng)增加之前可以達(dá)到多滿(mǎn)的一種尺度。當(dāng)哈希表中的條目數(shù)超出了加載因子與當(dāng)前容量的乘積時(shí),則要對(duì)該哈希表進(jìn)行操作即重建內(nèi)部數(shù)據(jù)結(jié)構(gòu),從而哈希表將具有大約兩倍的桶數(shù)。成員變量每個(gè)對(duì)由封裝,存在了對(duì)象數(shù)組中。 雖是讀書(shū)筆記,但是如轉(zhuǎn)載請(qǐng)注明出處 http://segmentfault.com/blog/exploring/ .. 拒絕伸手復(fù)制黨 LinkedLis...
閱讀 4259·2023-04-26 02:40
閱讀 2696·2023-04-26 02:31
閱讀 2784·2021-11-15 18:08
閱讀 597·2021-11-12 10:36
閱讀 1461·2021-09-30 09:57
閱讀 5250·2021-09-22 15:31
閱讀 2658·2019-08-30 14:17
閱讀 1308·2019-08-30 12:58