馃殌涓€銆佸垵濮嬪寲鐜勫锛氫綘浠ヤ负鐨刵ewAr" />
  1. 主页 > 好文章

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>

  1. 娉涘瀷闃叉涔卞鏁版嵁
  2. 鍒濆瀹归噺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+lambda25msJava8+绠€娲佸啓娉?/td>鎬ц兘鐣ヤ綆

瀹炴祴鍙戠幇锛氣€?strong>鈥嬮亶鍘嗘椂鐢ㄦ櫘閫歠or寰幆鏈€蹇€?/strong>鈥嬶紝浣嗘棩甯稿紑鍙戣繖鐐瑰樊璺濆彲浠ュ拷鐣ヤ笉璁°€傞噸鐐规槸瑕佹牴鎹満鏅€夊鏂规硶锛?/p>


馃洜锔忓洓銆佹€ц兘浼樺寲涓夋澘鏂э紙鐪熷疄妗堜緥锛?/h3>

鏌愮數鍟嗛」鐩浘鍥燗rrayList浣跨敤涓嶅綋瀵艰嚧鏈嶅姟鍣ㄥ畷鏈猴紒馃槺 浠栦滑鐘簡杩欎笁涓敊锛?/p>

  1. 娌℃湁鍒濆鍖栧閲忥紙榛樿10娆℃墿瀹癸級
  2. 棰戠箒浣跨敤contains()鏌ユ暟鎹紙鏃堕棿澶嶆潅搴(n)锛?/li>
  3. 鍦ㄥ惊鐜噷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>
  1. 鈥?strong>鈥媡rimToSize()鈥?/strong>鈥嬶細鎶婂簳灞傛暟缁勯暱搴﹁皟鏁翠负褰撳墠鍏冪礌涓暟锛岃兘鑺傜渷鍐呭瓨锛堥€傚悎闀挎湡瀛樻椿鐨勯泦鍚堬級
  2. 鈥?strong>鈥媠ubList()鑾峰彇鐨勫叾瀹炴槸瑙嗗浘鈥?/strong>鈥嬶細淇敼瀛愬垪琛ㄤ細褰卞搷鍘熸暟鎹紝杩欎釜鍧戞垜褰撳勾韪╁緱澶寸牬琛€娴侊紒
  3. 鈥?strong>鈥嬪簭鍒楀寲闄烽槺鈥?/strong>鈥嬶細ArrayList鑷繁瀹炵幇浜嗗簭鍒楀寲锛屼絾鍏冪礌瀵硅薄娌″疄鐜癝erializable鐨勮瘽...鍢垮樋锛岀瓑鐫€鏀禢otSerializableException澶хぜ鍖呭惂锛?/li>

涓句釜琛€娉渚嬶細鎴戜滑鍥㈤槦鏇剧敤subList()鍋氬垎椤垫煡璇紝缁撴灉鐢ㄦ埛鐐逛笅涓€椤垫椂锛岀涓€椤电殑鏁版嵁鍏ㄥ彉浜嗭紒鏈€鍚庡彂鐜版槸subList()鍦ㄦ悶楝硷紝鏀规垚new ArrayList<>(subList)鎵嶈В鍐炽€傪煒?/p>


馃幆鏈€鍚庤鍙ユ帍蹇冪獫瀛愮殑璇?/h3>

ArrayList灏卞儚鎶婄憺澹啗鍒€馃敧鈥斺€旂敤寰楀ソ鑳借В鍐冲悇绉嶉棶棰橈紝鐢ㄤ笉濂戒細鍓蹭激鑷繁銆傝浣忎袱涓粍閲戞硶鍒欙細

  1. 鈥?strong>鈥嬪鍒犲鐢ㄨ凯浠e櫒鈥?/strong>鈥?/li>
  2. 鈥?strong>鈥嬫煡璇㈠鐢ㄨ緟鍔╃粨鏋勨€?/strong>鈥?br/> 鍒棶鎴戞€庝箞鎬荤粨鍑烘潵鐨勶紝閮芥槸鍔犵彮debug鎹㈡潵鐨勭粡楠屽晩锛佺幇鍦ㄥ氨鍘籌DE閲岃瘯璇曡繖浜涙妧宸э紝淇濆噯浣犱唬鐮佽川閲忔彁鍗囦袱涓狶evel锛侌煉?/li>

本文由嘻道妙招独家原创,未经允许,严禁转载