㈠ java 定義一下這種多嵌套類型的Map Map<String, List<List<String>>> map= new HashMap<>(); 該如何賦值
先初始化最里層,然後層層往外,示例如下:
Map<String,List<List<String>>>map=newHashMap<>();
List<String>list1=newArrayList<>();
list1.add("a");
list1.add("b");
list1.add("c");
List<String>list2=newArrayList<>();
list2.add("1");
list2.add("2");
list2.add("3");
List<List<String>>list=newArrayList<>();
list.add(list1);
list.add(list2);
map.put("list",list);
System.out.println(map);
輸出結果為:
{list=[[a, b, c], [1, 2, 3]]}
㈡ java map .put 方法
Map.Put方法原理:
Map將對象table賦值給tab,並以tab是否為空作為是否第一次調用此方法的判斷,是則resize()並給tab,n賦值;
獲取tab的第i個元素:根據 (n - 1) & hash 演算法 ,計算出i找到,如果為空,調用newNode() ,賦值給tab第i個;
如果不為空,可能存在2種情況:hash值重復了,也就是put過程中,發現之前已經有了此key對應的value,則暫時e = p;
至於另外一種情況就是位置沖突了,即根據(n - 1) & hash演算法發生了碰撞,再次分情況討論;
1、以鏈表的形式存入;
2、如果碰撞導致鏈表過長(大於等於TREEIFY_THRESHOLD),就把鏈表轉換成紅黑樹;
3、最後,如果e不為空,將e添加到table中(e.value 被賦值為 putVal()中的參數 value);
(2)javamap賦值擴展閱讀:
HashMap存儲鍵值對時,發現找到的位置上已經存儲了元素。
情況一:調用該元素鍵的equals方法與該位置上元素的鍵進行比較,如果返回ture,則視新鍵與已經存在的鍵相同,用新值去更新舊值,然後put方法返回舊值。
情況二:調用該元素鍵的equals方法與該位置上元素的鍵進行比較,如果返回false,則新鍵與已經存在的鍵不相同,任然可以將新的元素存儲在該位置。
HashMap的put()方法返回null的特殊情況:
要是已經存在鍵的映射,但是值是null,那麼調用put()方法再更新鍵的值時,put()方法會把舊值null返回,這是返回null的特殊情況。存在元素時,要是找到的位置上沒有鍵的映射,put()方法也是返回null。