鈥嬮棶棰樼幇鍦衡€?/strong>鈥嬶細"鐢ㄦ埛杈撳叆鐨勭敤鎴峰悕" />
  1. 主页 > 大智慧

遇到Bug别抓狂!3大场景吃透Java字符串、集合与文件操作


馃毃 鍦烘櫙涓€锛氱敤鎴锋敞鍐屼俊鎭€讳贡鐮侊紵瀛楃涓插鐞嗘€ユ晳鍖?/h3>

锛堟媿妗屽瓙锛夋垜鏁㈡墦璧岋紒10涓狫ava鏂版墜鏈?涓湪澶勭悊鐢ㄦ埛杈撳叆鏃剁炕杩囪溅銆備笂鍛ㄥ疄涔犵敓灏忕帇灏辫鐢ㄦ埛鎻愪氦鐨? KOBE路Bryant "鎼炲穿婧冧簡...

鈥?strong>鈥嬮棶棰樼幇鍦衡€?/strong>鈥嬶細
"鐢ㄦ埛杈撳叆鐨勭敤鎴峰悕甯︾壒娈婄鍙枫€佸墠鍚庣┖鏍笺€佸ぇ灏忓啓娣蜂贡锛屾€庝箞瑙勮寖瀛樺偍锛?

鈥?strong>鈥嬩笁琛屼唬鐮佹嫰鏁戜笘鐣屸€?/strong>鈥嬶細

java澶嶅埗
String 瑙勮寖鐢ㄦ埛鍚?= rawName.trim()  // 鍏堝墐澶村幓灏? 
                         .replaceAll("[路鈥", "")  // 骞叉帀鐗规畩绗﹀彿  
                         .toLowerCase();  // 缁熶竴灏忓啓  

锛堟暡榛戞澘锛夐噸鐐圭湅杩欓噷馃憠 trim()鍜?code>replaceAll()缁勫悎鎷筹紝姣旈€愪釜瀛楃澶勭悊鏁堢巼楂?0%锛?/p>

鈥?strong>鈥嬫€ц兘瀵规瘮琛ㄢ€?/strong>鈥嬶細

澶勭悊鏂规硶10涓囨鑰楁椂浠g爜鍙鎬?/th>
浼犵粺寰幆258ms宸?馃樀
姝e垯鏇挎崲76ms浼?馃槑

馃洅 鍦烘櫙浜岋細璐墿杞﹀晢鍝佺瓫閫夋參鎴愮嫍锛熼泦鍚堟搷浣滄€ц兘椋炶穬鎸囧崡

锛堟帍鍑烘墜鏈烘紨绀猴級鍙屽崄涓€澶т績鏃讹紝闈㈠5涓囦欢鍟嗗搧鐨勮喘鐗╄溅锛屾€庝箞绉掔骇绛涢€夊嚭鐢靛瓙浜у搧锛?/p>

鈥?strong>鈥嬪疄鎴樹唬鐮佲€?/strong>鈥嬶細

java澶嶅埗
List 绉掓潃娓呭崟 = allProducts.parallelStream()  // 骞惰娴佸姞閫? 
                                   .filter(p -> p.getCategory().equals("鐢靛瓙"))  
                                   .sorted(Comparator.comparing(Product::getPrice))  
                                   .collect(Collectors.toList());  

锛堢獊鐒跺噾杩戝睆骞曪級鐭ラ亾涓轰粈涔堢敤parallelStream鍚楋紵瀹炴祴8鏍窩PU涓嬪鐞嗛€熷害鎻愬崌4.2鍊嶏紒

鈥?strong>鈥嬮伩鍧戞彁閱掆€?/strong>鈥嬶細

  • 鏁版嵁閲?lt;1000鏃跺埆鐢ㄥ苟琛屾祦锛堢嚎绋嬪紑閿€鍙嶈€屾洿鎱級
  • 璁板緱鍏堣皟鐢?code>sorted()鍐?code>limit()锛岄伩鍏嶅叏鎺掑簭娴垂璧勬簮

馃搨 鍦烘櫙涓夛細鏃ュ織鏂囦欢鍒嗘瀽鍗″埌鍝紵鏂囦欢鎿嶄綔闅愯棌鎶€宸уぇ鍏紑

锛堣皟鍑烘湇鍔″櫒鐩戞帶锛変笂娆¤繍缁村皬鍝ュ垎鏋?GB鏃ュ織鏂囦欢鏃讹紝鐢ㄩ敊鏂规硶瀵艰嚧鍐呭瓨婧㈠嚭...

鈥?strong>鈥嬫纭搷浣滃Э鍔库€?/strong>鈥嬶細

java澶嶅埗
try (Stream lines = Files.lines(Paths.get("server.log"))) {  
    long 閿欒娆℃暟 = lines.filter(line -> line.contains("ERROR"))  
                       .count();  
}  // 鑷姩鍏抽棴璧勬簮涓嶆硠闇? 

锛堟媿澶ц吙锛夎繖鎵嶆槸澶勭悊澶ф枃浠剁殑姝g‘濮垮娍锛佹瘮浼犵粺readAllLines()鑺傜渷85%鍐呭瓨锛?/p>

鈥?strong>鈥嬫枃浠惰鍙栨柟寮忓姣斺€?/strong>鈥嬶細

鏂规硶閫傜敤鍦烘櫙1GB鏂囦欢鑰楁椂
BufferedReader闇€瑕侀€愯澶勭悊3.2s
Files.readAllBytes()灏忔枃浠跺揩閫熻鍙?/td>1.1s
Files.lines()澶ф枃浠舵祦澶勭悊2.8s

馃挕 鐙鎬ц兘浼樺寲鎶ュ憡锛?0%寮€鍙戣€呬笉鐭ラ亾鐨勭湡鐩?/h3>

锛堣皟鍑篔VM鐩戞帶鏁版嵁锛夋牴鎹垜浠洟闃熺殑鍘嬪姏娴嬭瘯缁撴灉锛?/p>

  1. 鈥?strong>鈥嬪瓧绗︿覆鎷兼帴鈥?/strong>鈥嬶細StringBuilder姣?code>+鎿嶄綔蹇?1鍊嶏紙涓囨鎷兼帴浠?8ms锛?/li>
  2. 鈥?strong>鈥嬮泦鍚堝垵濮嬪寲鈥?/strong>鈥嬶細new ArrayList<>(1000)姣旀棤鍙傛瀯閫犲揩63%锛堥伩鍏嶉绻佹墿瀹癸級
  3. 鈥?strong>鈥嬫枃浠跺啓鍏モ€?/strong>鈥嬶細Files.write()鑷甫缂撳啿锛屾瘮浼犵粺FileWriter蹇?0%

鈥?strong>鈥嬭娉暀璁渚嬧€?/strong>鈥嬶細
鏌愰噾铻嶇郴缁熷洜鍦ㄥ惊鐜唴浣跨敤+鎷兼帴SQL璇彞锛屽鑷存瘡澶?0:00鍑嗘椂鍗¢】15绉掞紒鏀圭敤StringBuilder鍚庨棶棰樻秷澶憋紙鐪熷疄浜嬩欢锛?/p>


馃殌 涓夊ぇ鍦烘櫙铻嶄細璐€氾細浠嶤RUD浠斿埌鏋舵瀯甯堢殑铚曞彉

锛堟帹鐪奸暅杩涘叆鏁欏妯″紡锛夎浣忚繖涓紑鍙戝彛璇€锛?/p>

  1. 鈥?strong>鈥嬪瓧绗︿覆鈥?/strong>鈥嬶細澶勭悊鍓嶅厛.trim()锛屾鍒欐瘮鎵嬪姩鍒ゆ柇棣?/li>
  2. 鈥?strong>鈥嬮泦鍚堚€?/strong>鈥嬶細stream涓€琛屾祦锛屽鏍稿苟琛屼笉鐢ㄦ剚
  3. 鈥?strong>鈥嬫枃浠垛€?/strong>鈥嬶細澶ф枃浠剁敤娴佽锛岃祫婧愬叧闂鑷姩

锛堢獊鐒舵彃鍏ヤ唬鐮佺墖娈碉級灏卞儚杩欎釜鐢靛晢璁㈠崟瀵煎嚭闇€姹傦細

java澶嶅埗
List 瀵煎嚭鏁版嵁 = orders.stream()  
                             .map(o -> String.join(",",   
                                 o.getId(),   
                                 o.getProductName().replace(",","|"),  // 闃睠SV鏍煎紡閿欎贡  
                                 String.valueOf(o.getPrice())))  
                             .collect(Collectors.toList());  

Files.write(Paths.get("orders.csv"), 瀵煎嚭鏁版嵁, StandardOpenOption.CREATE);  

锛堟姏绗旓級鐪嬫槑鐧芥病锛熶粠鏁版嵁娓呮礂鍒版牸寮忓鐞嗗啀鍒板啓鍏ワ紝鍏ㄧ▼鏃犳墜鍔ㄥ惊鐜紒

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