2014-02-13 62 views
3

我有以下代碼爲樹地圖,我存儲重複的鍵,它似乎覆蓋現有的。TreeMap中的重複鍵

TreeMap<String, Integer> tm=new TreeMap<>(); 
tm.put("vivek", 1); 
tm.put("vivek", 2); 
System.out.println(tm); 

它打印{vivek=2}那麼它意味着地圖允許覆蓋基於關鍵?

+5

請閱讀'TreeMap'的javadoc。 –

+1

*將鍵映射到值的對象。地圖不能包含重複的鍵;每個鍵最多隻能映射一個值。* - [Map接口]的第一行(http://docs.oracle.com/javase/7/docs/api/java/util/Map.html)。 – SudoRahul

+0

地圖的目的是表示一系列鍵/值條目,其中每個鍵是*唯一的* ... – assylias

回答

8

所有地圖共享相同的基本屬性,其中之一是所有密鑰必須是唯一的。因此爲什麼keySet()返回Set

要做你正在尋找的你需要一個Multimap - 這本質上是一個Map到列表。

Map<Integer, List<String>> multiMap; 

要添加對象獲取列表爲關鍵,如果是零添加列表,然後你的價值添加到列表中,否則只是你的價值添加到現有的列表。

在各種第三方庫中都有一些multimap實現,或者很容易實現您自己的。