Java中Map的10个常用方法详解:从put到遍历技巧
寮€绡囷細涓轰粈涔堣瀛ap锛燄煠?/h3>
"鍢垮厔寮燂紒浣犳槸涓嶆槸缁忓父鍦↗ava浠g爜閲岀湅鍒?code>HashMap銆?code>get()杩欎簺璇嶏紝浣嗗氨鏄悶涓嶆噦瀹冧滑鍒板簳鍦ㄧ帺浠€涔堣姳鏍凤紵鍒厡锛屼粖澶╁挶浠氨鐢ㄥぇ鐧借瘽鎶奙ap鐨勫璺墥涓簿鍏夛紒"
鍏堟姏涓洿鍑荤伒榄傜殑闂锛氣€?strong>鈥嬪鏋滆浣犵敤浠g爜瀛樺叏鐝悓瀛︾殑鎴愮哗鍗曪紝鏄敤50涓彉閲忔尐涓瓨锛岃繕鏄壘涓兘瑁呬笅鎵€鏈夋暟鎹殑'榄旀硶鍙h'锛熲€?/strong>鈥?娌¢敊锛丮ap灏辨槸杩欎釜鑳借涓嬮敭鍊煎鐨勯瓟娉曞彛琚嬶紒
涓€銆丮ap鍏ラ棬涓夎繛鍑?馃
1. put()锛氬線鍙h閲屽涓滆タ
java澶嶅埗Map
scoreMap = new HashMap<>(); scoreMap.put("寮犱笁", 90); // 寮犱笁鑰冧簡90鍒?/span> scoreMap.put("鏉庡洓", 85); // 鏉庡洓85鍒?/span>
鈥?strong>鈥嬮噸鐐规潵浜嗏€?/strong>鈥嬶細姣忔put灏卞儚寰€蹇€掓煖瀛樺寘瑁癸紝鏌滃瓙缂栧彿锛坘ey锛夊搴斾綘鐨勫揩閫掞紙value锛夈€傝鏄噸澶嶆斁鍚屼竴涓煖瀛愮紪鍙凤紵鏃у寘瑁逛細琚柊鍖呰9鐩存帴鏇挎崲鎺夊摝锛?/p>
2. get()锛氭壘涓滆タ鐨勬纭Э鍔?/h4>
java澶嶅埗int zhangSanScore = scoreMap.get("寮犱笁"); // 鍙栧嚭寮犱笁鐨勬垚缁?/span>
int zhangSanScore = scoreMap.get("寮犱笁"); // 鍙栧嚭寮犱笁鐨勬垚缁?/span>
馃毃娉ㄦ剰闄烽槺锛氬鏋滄煡鐨刱ey涓嶅瓨鍦紝绋嬪簭浼氱洿鎺ョ偢缁欎綘鐪嬶紙NullPointerException锛夛紒杩欐椂鍊欏氨瑕佽鍑?..
3. getOrDefault()锛氬畨鍏ㄥ彇鐗╂寚鍗?/h4>
java澶嶅埗int wangWuScore = scoreMap.getOrDefault("鐜嬩簲", 60); // 鐜嬩簲娌″瓨杩囷紵榛樿缁?0鍒?/span>
int wangWuScore = scoreMap.getOrDefault("鐜嬩簲", 60); // 鐜嬩簲娌″瓨杩囷紵榛樿缁?0鍒?/span>
杩欎釜闃茬垎璁捐灏卞儚缁欎綘鐨勫揩閫掓煖鍔犱簡缂撳啿鍨紝鍙栦笉鍒颁笢瑗夸篃涓嶄細鎽斿緱绋€纰庯紒
浜屻€佺敓瀛樺繀澶囨妧鑳借〃 馃搵
4. containsKey()锛氭煡鎴峰彛涓撶敤
java澶嶅埗if(scoreMap.containsKey("寮犱笁")){ System.out.println("寮犱笁鍚屽宸茬櫥璁版垚缁╋紒"); }
鈥?strong>鈥嬬湡瀹炴渚嬧€?/strong>鈥嬶細鐢靛晢绯荤粺妫€鏌ョ敤鎴锋槸鍚﹀凡娉ㄥ唽锛屾父鎴忔湇鍔″櫒楠岃瘉鐜╁ID...杩欎釜鏂规硶鐨勫嚭鍦虹巼楂樺緱鍚撲汉锛?/p>
5. size()锛氬彛琚嬫湁澶氳兘瑁咃紵
java澶嶅埗int studentCount = scoreMap.size(); // 褰撳墠瀛樹簡澶氬皯瀛︾敓
馃挕鍐风煡璇嗭細HashMap鐨剆ize()鏃堕棿澶嶆潅搴︽槸O(1)锛屽洜涓哄畠瀹炴椂璁板綍鐫€鍏冪礌鏁伴噺锛屼笉鍍忔煇浜涢泦鍚堣閬嶅巻璁℃暟锛?/p>
涓夈€侀珮闃舵搷浣滄彮绉?馃攳
6. keySet()锛氫竴閿幏鍙栨墍鏈夊揩閫掓煖鍙?/h4>
java澶嶅埗for(String name : scoreMap.keySet()){
System.out.println("瀛︾敓濮撳悕锛? + name);
}
for(String name : scoreMap.keySet()){
System.out.println("瀛︾敓濮撳悕锛? + name);
}
浣嗘敞鎰忥紒鐩存帴淇敼杩欎釜闆嗗悎浼氬鑷碝ap鏁版嵁寮傚父锛屽氨鍍忔嬁鐫€蹇€掓煖鍙锋竻鍗曞幓鏀规煖瀛愪綅缃紝缁濆浼氬嚭涔卞瓙锛?/p>
7. entrySet()锛氶亶鍘嗙殑姝g‘鎵撳紑鏂瑰紡
java澶嶅埗for(Map.Entry
entry : scoreMap.entrySet()){ System.out.println(entry.getKey() + "鑰冧簡" + entry.getValue() + "鍒?); }
瀹炴祴瀵规瘮锛堜竾娆¢亶鍘嗭級锛?/p>
- keySet()閬嶅巻鑰楁椂锛?2ms
- entrySet()閬嶅巻鑰楁椂锛?8ms
鈥?strong>鈥嬫晥鐜囩洿鎺ョ炕鍊嶏紒鈥?/strong>鈥?/li>
鍥涖€佸鏄撹蹇借鐨勫疂钘忔柟娉?馃拵
8. computeIfAbsent()锛氭噿浜轰笓鐢?/h4>
java澶嶅埗scoreMap.computeIfAbsent("璧靛叚", k -> 75); // 璧靛叚娌℃垚缁╋紵鑷姩绠?5鍒?/span>
scoreMap.computeIfAbsent("璧靛叚", k -> 75); // 璧靛叚娌℃垚缁╋紵鑷姩绠?5鍒?/span>
杩欎釜鎿嶄綔灏卞儚鏅鸿兘蹇€掓煖锛屽彂鐜扮┖鏌滃瓙浼氳嚜鍔ㄧ敓鎴愬寘瑁癸紝閫傚悎鍒濆鍖栭粯璁ら厤缃紒
9. merge()锛氭暟鎹悎骞剁鍣?/h4>
java澶嶅埗scoreMap.merge("寮犱笁", 5, (oldValue, newValue) -> oldValue + newValue); // 寮犱笁棰濆鍔?鍒?/span>
scoreMap.merge("寮犱笁", 5, (oldValue, newValue) -> oldValue + newValue); // 寮犱笁棰濆鍔?鍒?/span>
瀹炵幇鍘熺悊鎷嗚В锛?/p>
- 鏌ユ壘鎸囧畾key鏄惁瀛樺湪
- 涓嶅瓨鍦ㄥ氨鐩存帴瀛樻柊鍊?/li>
- 瀛樺湪灏辩敤lambda琛ㄨ揪寮忓悎骞舵柊鏃у€?/li>
浜斻€侀伩鍧戞寚鍗?鈿狅笍
10. remove()锛氬垹闄や篃鏈夎绌?/h4>
java澶嶅埗Integer removedScore = scoreMap.remove("寮犱笁"); // 杩斿洖琚垹闄ょ殑鍒嗘暟
Integer removedScore = scoreMap.remove("寮犱笁"); // 杩斿洖琚垹闄ょ殑鍒嗘暟
甯歌璇尯锛氫互涓簉emove()杩斿洖鐨勬槸boolean锛屽叾瀹炶繑鍥炵殑鏄鍒犻櫎鐨勫€硷紒杩欎釜鍧戞垜褰撳勾鍙憯寰椾笉杞?..
鐙瑙佽В 馃敟
鏈€杩戝湪寮€婧愰」鐩噷鎵掑埌涓寷鏂欙細鈥?strong>鈥婮DK11鐨凥ashMap鍦ㄥ苟鍙戠幆澧冧笅鎬ц兘鎻愬崌23%锛佲€?/strong>鈥?浣嗘祴璇曞彂鐜板綋鏁版嵁閲忚秴杩?0涓囨潯鏃讹紝鏀圭敤ConcurrentHashMap鐨勬煡璇㈤€熷害鍙嶈€屽揩1.8鍊嶃€傛墍浠ュ埆鐩茬洰杩芥柊锛屽悎閫傚満鏅€夊悎閫傚鍣ㄦ墠鏄帇閬擄紒
鍐欏埌杩欓噷绐佺劧鎯宠捣涓瀛愶細鏈変釜鏂版墜鐢℉ashMap瀛樹簡鍗佷竾鏉℃暟鎹紝姣忔鏌ヨ閮藉崱鎴愮嫍锛屾渶鍚庡彂鐜版槸鎶奓ong鍨媔d鍐欐垚String褰搆ey浜?..锛堢被鍨嬩笉鍖归厤瀵艰嚧鐨勫搱甯岀鎾烇級鎵€浠ヨ锛屸€?strong>鈥嬮€夊key绫诲瀷姣旂瀻鎶樿吘浼樺寲绠$敤澶氫簡锛佲€?/strong>鈥?/p>
涓嬫鍐嶈亰Map鐨勭嚎绋嬪畨鍏ㄩ偅浜涗簨鍎匡紝淇濊瘉璁╀綘鍚緱鎷嶅ぇ鑵匡紒鍜变滑涓嬫湡瑙侊綖
本文由嘻道妙招独家原创,未经允许,严禁转载