我有以下代碼爲樹地圖,我存儲重複的鍵,它似乎覆蓋現有的。TreeMap中的重複鍵
TreeMap<String, Integer> tm=new TreeMap<>();
tm.put("vivek", 1);
tm.put("vivek", 2);
System.out.println(tm);
它打印{vivek=2}
那麼它意味着地圖允許覆蓋基於關鍵?
我有以下代碼爲樹地圖,我存儲重複的鍵,它似乎覆蓋現有的。TreeMap中的重複鍵
TreeMap<String, Integer> tm=new TreeMap<>();
tm.put("vivek", 1);
tm.put("vivek", 2);
System.out.println(tm);
它打印{vivek=2}
那麼它意味着地圖允許覆蓋基於關鍵?
TreeMap#public V put(K key, V value)
API說
將指定值與此映射中指定的鍵。 如果映射先前包含密鑰的映射,則舊值將被替換。
所有地圖共享相同的基本屬性,其中之一是所有密鑰必須是唯一的。因此爲什麼keySet()
返回Set
。
要做你正在尋找的你需要一個Multimap - 這本質上是一個Map到列表。
Map<Integer, List<String>> multiMap;
要添加對象獲取列表爲關鍵,如果是零添加列表,然後你的價值添加到列表中,否則只是你的價值添加到現有的列表。
在各種第三方庫中都有一些multimap實現,或者很容易實現您自己的。
請閱讀'TreeMap'的javadoc。 –
*將鍵映射到值的對象。地圖不能包含重複的鍵;每個鍵最多隻能映射一個值。* - [Map接口]的第一行(http://docs.oracle.com/javase/7/docs/api/java/util/Map.html)。 – SudoRahul
地圖的目的是表示一系列鍵/值條目,其中每個鍵是*唯一的* ... – assylias