Map 跟List和 Set不同,不屬於Collection下的child interface
Map有Key跟Value組成一對。
而Key有唯一性,若新增同一個key有不同的value,會把原先key值的資料蓋過去。
類似C#跟Python辭典的功能
Map又分為 HashMap 、HashTable、TreeMap、LinkedHashMap等等
HashMap | HashTable |
非同步 | 同步(較安全) |
效率好 | 效率較差 |
Key跟Value可以為null | 皆不能為null |
HashMap map1 = new HashMap(); //基本語法 map1.put(Key,value); map1.containKey(key); //使用有包含此key值 用來檢查重複 map1.size(); // 用來看map大小 map1.get(Key); // 用來取得對應的value值 map1.keySet(); // 看全部的key值 map1.values(); // 看全部對應的value值 //<key的類型 字串,value類型 整數> HashMap <String, Integer> map1 = new HashMap(); for ( HashMap.Entry <String, Integer> m : map1.entrySet()){ m.getValue() //取得該元素的value m.getKey() //取得該元素的key } //尋覽map的方法
範例
import java.util.Hashtable; public class MapTest1 { public static void main(String[] args) { Hashtable map1 = new Hashtable(); map1.put("name", "Brad"); map1.put("weight", 80.4); map1.put("length", 176); map1.put("length", 180); // 身高原本176會被覆蓋成180 //map1.put(null, 17);//會跳例外 //map1.put(12, null);//會跳例外 System.out.println(map1.size()); } } package hackerrank; //這是hackerrank的Map範例 要找出貨物成對的組數 import java.util.*; public class SockMerchant { public static void main(String[] args) { int[] ar = { 10, 20, 20, 10, 10, 30, 50, 10, 20 }; //這邊把貨物的每個數值當成唯一key int n = ar.length; int ans = newsolution.sockMerchant(n, ar); System.out.println(ans); } } class newsolution { static int sockMerchant(int n, int[] ar) { int pairsNums = 0; HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();//可以指定key跟value的型態 for (int i : ar) { if (!hm.containsKey(i)) { //是否有重複 hm.put(i, 1); } else { hm.put(i, hm.get(i) + 1); //重複後 key裡的值+1 } } //System.out.println(hm.keySet()); //取得全部的key值 //System.out.println(hm.values()); //取得全部key的value for (HashMap.Entry<Integer, Integer> m : hm.entrySet()) { //尋覽map的方法 if (m.getValue() >= 2) { pairsNums += (int) m.getValue() / 2; } } return pairsNums; } }
@copyright MRcodingRoom
觀看更多文章請點MRcoding筆記
觀看更多文章請點MRcoding筆記