2013-03-06 81 views
-3

我已经创建了下面的列表中,但在第一个定义,我用哈希图(对于第一个字符串),但现在我不希望它是唯一,我应该如何定义它?创建深列表非唯一键

HashMap<String, LinkedHashMap<String, String>> entityList = new HashMap<String, LinkedHashMap<String, String>>(); 

由于哈希映射在这里被定义我可以进入到主列表中的重复条目, 我应该如何改变我的定义,可以让我进入重复条目的选项。

我需要像下面的结构一样构建它。

emp<name,test> 
    <lastname,lastname> 
    <salery,1000> 
emp<firstname,dan> 
    <age,20> 
adress<post,111> 
     <street,hhh> 
+2

无法理解任何东西! (O_o) – SudoRahul 2013-03-06 10:42:00

+2

Em .... Wat? O_O – user 2013-03-06 10:42:24

+0

我编辑了我的文章,很抱歉... \ – 2013-03-06 10:43:41

回答

0

使用hashmap要求密钥是唯一的,否则 - 你怎么能得到正确的值?

你可以做的是涉及几个值到一个键,使用HashMap<String, List<valueType>>

您可以使用:与

HashMap<String, List<yourObject>> 

所以每个键有几个对象。

你的情况:

HashMap<String, List<LinkedHashMap<String, String>>> 

如果需要使用多个对象的集合,你可以使用List<yourObject>yourObject会照着你的意思(拿在例如StringLinkedHashMap<String, String>)。

我会使用的首选,但如果你真的不想要它 - 使用List<yourObject>

+0

我已经编辑我的文章,所以你的解决方案是无效的... – 2013-03-06 10:46:37

+0

我认为它是有效的。在这里你可以存储每个键的几个值=>键不是唯一的。 – BobTheBuilder 2013-03-06 10:47:57

+0

它仍然很不清楚。你想添加什么重复的条目?以及“我可以进入主要列表重复条目”中的“主列表”是什么? – BobTheBuilder 2013-03-06 12:02:55

0

你真正想要什么样子,相同的唯一密钥 - 许多价值型。 但默认情况下,任何地图定义密钥都是唯一的。因为每个Map都对它执行任何操作。 因此,最好为您的应用程序使用不同的结构。你可以尝试这样的..

HashMap <String, Object> entityList = new HashMap<String, Object>();
LinkedHashMap<String, String> linkedHashmap = new LinkedHashMap<String, String>();
entityList.put("key1", updateObject(entityList.get("key1", newkey, new value);

public LinkedHashMap< String, String> updateObject(LinkedHashMap<String, String> linkedHashmap,String newKey,String newValue){
linkedHashmap.put(newKey,newValue);
return linkedHashmap;
}

+0

我不明白你怎么能推荐一个具体的实现,而不会质疑原始海报的动机。他为什么选择HashMap?他如何处理潜在的许多相关价值?在推荐适当的实施方案之前,必须回答这些问题。 – 2013-03-06 12:52:10

+0

感谢@ClassStacker帮助我(如何推荐答案)。 由于原始海报开始实施HashMap,并且对于同一个关键用户想要存储不同类型的数据,因此我建议将HashMap与Object作为值。 – Yup 2013-03-07 06:42:47

0

或者,你可以在看一看

public interface Multimap<K,V>

类似地图的集合,但它可以 与单个键关联多个值。如果您拨打put(K, V)两次,使用相同的密钥但 不同的值,multimap包含密钥到 值的映射。