【问题标题】:Create deep list with non unique key [closed]使用非唯一键创建深度列表 [关闭]
【发布时间】:2013-03-06 10:40:49
【问题描述】:

我创建了以下列表,但在第一个定义中我使用 哈希映射(用于第一个字符串)但现在我 不希望它是唯一的,应该怎么定义?

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> 

【问题讨论】:

  • 无法理解任何事情! (O_o)
  • 我已经编辑了我的帖子,对不起...\
  • 它仍然很模糊。您的具体要求是什么?
  • 如果你使用HashMap,并调用get("emp"),你期望得到什么?
  • 我不太明白为什么你会想要在你的数据结构中这样做会引入歧义——当然最好将它们分成单独的数据结构?您究竟打算如何优雅地再次提取数据?

标签: java arrays list map


【解决方案1】:

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

您可以使用HashMap&lt;String, List&lt;valueType&gt;&gt; 将多个值与单个键相关联

你可以使用:

HashMap<String, List<yourObject>>

所以每个键都有几个相关的对象。

在你的情况下:

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

如果您需要一个包含多个对象的集合,您可以随意使用List&lt;yourObject&gt;yourObject(在您的示例中使用StringLinkedHashMap&lt;String, String&gt;)。

我会使用第一个选择,但如果你真的不想要它 - 使用 List&lt;yourObject&gt;

【讨论】:

  • 我已经编辑了我的帖子,所以您的解决方案无效...
  • 我认为它是有效的。在这里您可以为每个键存储多个值 => 键不是唯一的。
  • 目前还不清楚。您要添加哪些重复条目? “我可以输入主列表重复条目”中的“主列表”是什么?
  • 就像我的例子中的 emp 一样,我可以添加许多 emp 条目以及与之相关的不同列表
  • 好的。所以如果你调用 get("emp"),你期望得到什么?也许是相关值的列表?
【解决方案2】:

你真正想要的是,相同的唯一键值。 但是默认情况下,任何 Map 定义 Key 都是唯一的。因为每个 Map 都对它的键执行任何操作。 因此,最好为您的应用程序使用不同的结构。你可以试试这样..

HashMap &lt;String, Object&gt; entityList = new HashMap&lt;String, Object&gt;();
LinkedHashMap&lt;String, String&gt; linkedHashmap = new LinkedHashMap&lt;String, String&gt;();
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;
}

【讨论】:

  • 我不明白您如何在不质疑原始发布者的动机的情况下推荐特定的实现。他为什么选择HashMap?他需要如何处理潜在的许多相关值?在推荐适当的实施之前,必须回答这些问题。
  • 感谢@ClassStacker 帮助我(如何推荐答案)。由于原始海报开始实现 HashMap 并且对于相同的关键用户想要存储不同类型的数据,因此我建议使用 Object 作为值的 HashMap。
【解决方案3】:

或者,您可以查看Guava MultiMap

public interface Multimap&lt;K,V&gt;

类似于 Map 的集合,但可能关联多个值 用一把钥匙。如果你调用put(K, V) 两次,使用相同的键但是 不同的值,多​​重映射包含从键到两者的映射 价值观。

【讨论】:

    猜你喜欢
    • 2011-03-26
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 2021-04-25
    • 2021-04-10
    相关资源
    最近更新 更多