2009-11-18 36 views
-1

如何在java中存储哈希表中的多个数组列表对象 &我该如何恢复它。在java中添加Arraylist对象到哈希表中

+0

你是指同一个密钥的多个ArrayLists?或者每个ArrayList都得到自己的密钥(如Murali的答案)? – Thilo 2009-11-18 07:39:13

+0

-1问题很模糊,听起来像提交者从来没有打扰过看Map或Hashtable文档。 – 2009-11-18 08:29:48

回答

2

不要。使用HashMap而不是Hashtable - 它不同步。

Map<String, ArrayList<SomeObject>> myMap = new HashMap<String, ArrayList<SomeObject>>(); 
ArrayList<SomeObject> list = new ArrayList<SomeObject>(); 
list.add(someObjectInstance1); 
list.add(someObjectInstance2); 
myMap.put("key1", list); // stores list containing instances #1 and #2 under key "key1" 
ArrayList<SomeObject> list2 = new ArrayList<SomeObject>(); 
list2.add(someObjectInstance3); 
myMap.put("key2", list2); // stores list2 containing instance #3 under key "key2" 

SomeObject obj1 = myMap.get("key1").get(0); // returns instance #1 
SomeObject obj2 = myMap.get("key1").get(1); // returns instance #2 
SomeObject obj3 = myMap.get("key2").get(0); // returns instance #3 

所有这一切说,你可能要考虑使用MultimapGoogle Collections代替:

Multimap<String, ArrayList<SomeObject>> myMap = ArrayListMultimaps.create(); 
myMap.put("key1", someObjectInstance1); 
myMap.put("key1", someObjectInstance2); 
myMap.put("key2", someObjectInstance3); 

SomeObject obj1 = myMap.get("key1").get(0); // returns instance #1 
SomeObject obj2 = myMap.get("key1").get(1); // returns instance #2 
SomeObject obj3 = myMap.get("key2").get(0); // returns instance #2 

你可以看到这个方法如何更直接的方式是。

+1

上面的代码没有添加多个 arraylist对象在Hashtable 2009-11-18 06:57:47

+0

我认为这将是非常明显的如何添加第二(第3,第N)列表到地图通过查看上面的代码,但显然我错了。更新以说明两个列表。 – ChssPly76 2009-11-18 07:38:25

+0

在那里,我恢复了我的失望,希望你感觉更好。 – 2009-11-18 07:43:11

-1

使用每个Linklist的Hashcode作为密钥。将其中一篇文章中提到的F​​OR值用作Keys可能不是一个好主意。如果你不得不在别的地方添加一个新的List?你将不得不遍历整个地图找到下一个最好的关键。

+1

使用链表的哈希码作为哈希键是一个可怕的想法。首先,它对应用程序没有任何意义。把东西放入散列表(而不是列表)的唯一原因是能够通过键查找它们。其次,有很多碰撞:如果你输入三个空列表,他们会覆盖彼此。第三,你不应该使用可以改变的散列键,并且列表内容的改变会影响列表的散列码。 – Thilo 2009-11-18 07:34:48

+0

Thilo,你的回答非常好。我的错误,我认为哈希码将等于列表存储在内存中的地址,因此是唯一的。 – Geek 2009-11-18 09:07:36