MultiValueMap類(Apache公用集合)可以很容易地處理值爲集合的地圖。我正在尋找一個類,它可以很容易地處理其鍵爲對象且值爲地圖的地圖。地圖數據結構的地圖
我使用Java 1.4,因此無法使用Google Collections或泛型。
MultiValueMap類(Apache公用集合)可以很容易地處理值爲集合的地圖。我正在尋找一個類,它可以很容易地處理其鍵爲對象且值爲地圖的地圖。地圖數據結構的地圖
我使用Java 1.4,因此無法使用Google Collections或泛型。
地圖的地圖實際上是一個沒有單根節點的樹型結構(以及地圖的地圖...)。
您可以看看Composite pattern,它被廣泛用於實現樹結構(如果它們的組件具有與我感覺不到的相同類型)。
另一種解決方案是實現一個簡單的域模型。這將是更清晰閱讀,易於維護是這樣的:
school.getPupil ("John Doe").getMark ("Math")
比
school.get ("John Doe").get ("Math")
在常規地圖收集工程這樣的:
Map<Object,Map<Object,Object>> mapOfMaps = new LinkedHashMap<Object,Map<Object,Object>>();
Object newObject = new String("object as string");
mapOfMaps.put(newObject, new LinkedHashMap<Object,Object>());
Map<Object,Object> objectMap = mapOfMaps.get(newObject);
事實上,如果你不擔心類型安全,你可以把任何你想要的價值部分:
Map<Object,Object> mapOfWhatever = new LinkedHashMap<Object,Object>();
Object newObject = new String("object as string");
mapOfWhatever.put(newObject, new LinkedHashMap<Object,Object>());
Map<Object,Object> objectMap = (Map<Object, Object>) mapOfWhatever.get(newObject);
通常人們不想擁有關心給定的(第一個)鍵是否已經在'mapOfMaps'中,例如當做'mapOfMaps.get(「firstKey」)。put(「secondKey」,value)'。例如,Python的地圖爲此設置了一個['setdefault'方法](http://docs.python.org/2/library/stdtypes.html#dict.setdefault)。 – 2013-07-17 12:30:10
如果您有map:{string,map:{string,thing}}
(故意而不是使用Java語法來避免整個Java1.4/Java5業務),那麼您還應該考慮是否應該將其模型化爲map:{tuple:{string,string},thing}
。如果多級查找占主導地位,那麼這是一個很好的改變(假如你實施了一個好的tuple
,那麼equals()
正確,hashCode()
是智能的),但是如果你做了很多插入和刪除操作,那麼它就不太好。
hashCode中的智能可能意味着只是想出一種合理的方式將內容的hashCodes中的位混合在一起。如果成員的價值觀是來自不相交的集合(例如姓名和職業),那麼你可以將它們異或 - 不完美但便宜且快速 - 但是如果你的控制/確定性較低,那麼你需要做其他的事情(例如,旋轉XOR之前的其中一個值的位)。
你需要哪一邊是地圖?你是從地圖映射到對象,映射到對象還是映射到映射? – MikeD 2010-06-22 13:51:49
難道你不能只讓地圖<東西,地圖>?或者你想能夠做一些像map.put(key1,key2,value)的東西? – Dave 2010-06-22 13:53:32
我想,這並不是說它過於相關,但我很好奇:哪個公司/行業(特別是您可以輕鬆告訴我們的)仍然需要Java 1.4?即使Java 5已經終結了。 Java 1.4已經使用了將近2年了。 – 2010-06-22 13:53:35