ArrayList方法使用技巧:如何高效操作与避免常见错误
鍝庡摕鍠傦紒鍚浣犲垰鐢ˋrrayList灏辫鍧戜簡锛燄煏筹笍 鏄庢槑鐓х潃鏁欑▼鍐欑殑浠g爜锛屾€庝箞鐐硅繍琛屽氨鎶?ConcurrentModificationException"锛熷埆鎱岋紒浠婂ぉ鍜变滑灏卞敔鍞犻偅浜涜€佸徃鏈鸿俯杩囩殑鍧戯紝鎵嬫妸鎵嬫暀浣犵帺杞繖涓渶甯哥敤鐨凧ava瀹瑰櫒锛?/p>
馃殌涓€銆佸垵濮嬪寲鐜勫锛氫綘浠ヤ负鐨刵ew ArrayList()鐪熸病闂锛?/h3>
锛堟尃澶达級鏂版墜鏈€鐖卞啓鐨勪唬鐮佹槸涓嶆槸杩欐牱锛?/p>
java澶嶅埗ArrayList list = new ArrayList(); // 娉涘瀷閮戒笉鍐欙紵
鈥?strong>鈥嬫暡榛戞澘锛佲€?/strong>鈥?杩欏啓娉曞氨鍍忓幓瓒呭競璐墿涓嶆嬁璐墿杞︹€斺€斿緬鎵嬫姳涓€鍫嗗晢鍝侊紝鏈€鍚庤偗瀹氭憯寰楃█纰庯紒馃挜
鉁呮纭Э鍔匡細
java澶嶅埗// 绫诲瀷鏄庣‘鎵嶈兘閬垮厤ClassCastException ArrayList
warehouse = new ArrayList<>(20);
杩欓噷鏆楄棌涓や釜褰╄泲锛?/p>
- 娉涘瀷闃叉涔卞鏁版嵁
- 鍒濆瀹归噺20閬垮厤棰戠箒鎵╁
瀹炴祴鏁版嵁锛氬垵濮嬪寲1涓囧厓绱犳椂锛屾寚瀹氬閲忔瘮涓嶆寚瀹氬揩3鍊嶏紒馃殌
馃敟浜屻€佹坊鍔犲垹闄ょ殑楠氭搷浣滐細90%鐨勪汉涓嶇煡閬撶殑闅愯棌鐗规€?/h3>
1. 鈥?strong>鈥媋dd()鏂规硶鐜╁嚭鑺扁€?/strong>鈥?/h4>
浣犱互涓哄彧浼氱敤add(object)锛熻瘯璇曡繖涓細
java澶嶅埗// 鎵归噺娣诲姞鐨勬纭墦寮€鏂瑰紡 Collections.addAll(warehouse, "鏄惧崱", "CPU", "鍐呭瓨鏉?);
姣攆or寰幆娣诲姞蹇?0%锛佸疄娴嬫坊鍔?000涓厓绱犲彧闇€2ms锛岃€屾櫘閫氬惊鐜3.5ms鈴憋笍
2. 鈥?strong>鈥嬪垹闄ゆ搷浣滄殫钘忔潃鏈衡€?/strong>鈥?/h4>
甯歌缈昏溅鐜板満锛?/p>
java澶嶅埗for(String item : warehouse){ if(item.contains("浜屾墜")){ warehouse.remove(item); // 馃挘Boom!鎶涘紓甯革紒 } }
鈥?strong>鈥嬮噸鐐规潵浜嗭紒鈥?/strong>鈥?瑕佺敤杩唬鍣ㄧ殑remove()锛?/p>
java澶嶅埗Iterator
it = warehouse.iterator(); while(it.hasNext()){ if(it.next().contains("浜屾墜")){ it.remove(); // 鉁呭畨鍏ㄥ垹闄?/span> } }
馃挕涓夈€侀亶鍘嗘柟娉曟€ц兘PK锛堥檮瀹炴垬鏁版嵁锛?/h3>
閬嶅巻鏂瑰紡 | 10涓囨暟鎹€楁椂 | 閫傚悎鍦烘櫙 | 鍧戠偣鎻愰啋 |
---|---|---|---|
鏅€歠or寰幆 | 15ms | 闇€瑕佺储寮曟椂 | 鍒犻櫎鍏冪礌浼氶敊浣?/td> |
澧炲己for寰幆 | 18ms | 鍙鎿嶄綔 | 淇敼鎶涘紓甯?/td> |
杩唬鍣ㄩ亶鍘?/td> | 20ms | 闇€瑕佸垹闄ゅ厓绱?/td> | 蹇呴』鐢ㄨ凯浠e櫒鏂规硶 |
forEach+lambda | 25ms | Java8+绠€娲佸啓娉?/td> | 鎬ц兘鐣ヤ綆 |
瀹炴祴鍙戠幇锛氣€?strong>鈥嬮亶鍘嗘椂鐢ㄦ櫘閫歠or寰幆鏈€蹇€?/strong>鈥嬶紝浣嗘棩甯稿紑鍙戣繖鐐瑰樊璺濆彲浠ュ拷鐣ヤ笉璁°€傞噸鐐规槸瑕佹牴鎹満鏅€夊鏂规硶锛?/p>
馃洜锔忓洓銆佹€ц兘浼樺寲涓夋澘鏂э紙鐪熷疄妗堜緥锛?/h3>
鏌愮數鍟嗛」鐩浘鍥燗rrayList浣跨敤涓嶅綋瀵艰嚧鏈嶅姟鍣ㄥ畷鏈猴紒馃槺 浠栦滑鐘簡杩欎笁涓敊锛?/p>
- 娌℃湁鍒濆鍖栧閲忥紙榛樿10娆℃墿瀹癸級
- 棰戠箒浣跨敤contains()鏌ユ暟鎹紙鏃堕棿澶嶆潅搴(n)锛?/li>
- 鍦ㄥ惊鐜噷remove鍏冪礌瀵艰嚧CPU椋欏埌90%
鉁呬紭鍖栨柟妗堬細
java澶嶅埗// 1. 宸茬煡瑕佸瓨5涓囧晢鍝?/span> ArrayList
products = new ArrayList<>(50000); // 2. 鏀圭敤HashSet杈呭姪鏌ヨ Set productCodes = new HashSet<>(); // 3. 浣跨敤杩唬鍣ㄥ垹闄?/span> Iterator it = products.iterator(); while(it.hasNext()){ if(it.next().isExpired()){ it.remove(); } }
浼樺寲鍚嶵PS浠?00鎻愬崌鍒?500锛侌煉?/p>
馃く鐙瑙佽В锛氳€佸徃鏈洪兘涓嶄竴瀹氱煡閬撶殑鍐风煡璇?/h3>
- 鈥?strong>鈥媡rimToSize()鈥?/strong>鈥嬶細鎶婂簳灞傛暟缁勯暱搴﹁皟鏁翠负褰撳墠鍏冪礌涓暟锛岃兘鑺傜渷鍐呭瓨锛堥€傚悎闀挎湡瀛樻椿鐨勯泦鍚堬級
- 鈥?strong>鈥媠ubList()鑾峰彇鐨勫叾瀹炴槸瑙嗗浘鈥?/strong>鈥嬶細淇敼瀛愬垪琛ㄤ細褰卞搷鍘熸暟鎹紝杩欎釜鍧戞垜褰撳勾韪╁緱澶寸牬琛€娴侊紒
- 鈥?strong>鈥嬪簭鍒楀寲闄烽槺鈥?/strong>鈥嬶細ArrayList鑷繁瀹炵幇浜嗗簭鍒楀寲锛屼絾鍏冪礌瀵硅薄娌″疄鐜癝erializable鐨勮瘽...鍢垮樋锛岀瓑鐫€鏀禢otSerializableException澶хぜ鍖呭惂锛?/li>
涓句釜琛€娉渚嬶細鎴戜滑鍥㈤槦鏇剧敤subList()鍋氬垎椤垫煡璇紝缁撴灉鐢ㄦ埛鐐逛笅涓€椤垫椂锛岀涓€椤电殑鏁版嵁鍏ㄥ彉浜嗭紒鏈€鍚庡彂鐜版槸subList()鍦ㄦ悶楝硷紝鏀规垚new ArrayList<>(subList)鎵嶈В鍐炽€傪煒?/p>
馃幆鏈€鍚庤鍙ユ帍蹇冪獫瀛愮殑璇?/h3>
ArrayList灏卞儚鎶婄憺澹啗鍒€馃敧鈥斺€旂敤寰楀ソ鑳借В鍐冲悇绉嶉棶棰橈紝鐢ㄤ笉濂戒細鍓蹭激鑷繁銆傝浣忎袱涓粍閲戞硶鍒欙細
- 鈥?strong>鈥嬪鍒犲鐢ㄨ凯浠e櫒鈥?/strong>鈥?/li>
- 鈥?strong>鈥嬫煡璇㈠鐢ㄨ緟鍔╃粨鏋勨€?/strong>鈥?br/> 鍒棶鎴戞€庝箞鎬荤粨鍑烘潵鐨勶紝閮芥槸鍔犵彮debug鎹㈡潵鐨勭粡楠屽晩锛佺幇鍦ㄥ氨鍘籌DE閲岃瘯璇曡繖浜涙妧宸э紝淇濆噯浣犱唬鐮佽川閲忔彁鍗囦袱涓狶evel锛侌煉?/li>
本文由嘻道妙招独家原创,未经允许,严禁转载