【问题标题】:Displaying key-values in HashMap在 HashMap 中显示键值
【发布时间】:2015-10-26 21:02:02
【问题描述】:

关于下面的代码,我有 2 个问题,

1.我的哈希图中有两次键“二”,打印时,“二”只显示一次。为什么它不显示“二”两次?

2.如何选择性地显示“二”键?

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class main {
public static void main(String[] args){
HashMap<String,String> myMap = new HashMap<String,String>();

    myMap.put("one", "1");
    myMap.put("two", "2");
    myMap.put("three", "3");
    myMap.put("two", "4");

    Set <String> mySet =myMap.keySet();
    Iterator itr = mySet.iterator();

    while(itr.hasNext()){
        String key = (String) itr.next();
        System.out.println(key);
    }

}
}

【问题讨论】:

标签: java hashmap


【解决方案1】:

Hashmap 的键集中每个键可能只有一个键条目。当您对 Maps 使用相同的键(包括 HashMap)时,第二次将键值对放入映射将覆盖第一次。

如果您想要一对多映射,您可以使用 Multimap 或 HashMap 将对象映射到对象集合(尽管 Multimap 很可能会让您更轻松)

要显示给定键的值,请使用:

System.out.println(myMap.get(myKey));
System.out.println(myMap.get("two"));

【讨论】:

  • 实际上这是Map接口的一部分,不是HashMap特有的东西,也不是Java特有的东西,但它是地图习语的一般工作方式(编程和数学可能还有更多)。
【解决方案2】:

HashtableHashMap 是一对一的键值存储。这意味着对于一个键,您只能拥有一个元素。你仍然可以实现你想要的:

HashMap<String, List<String>>

当你将一个元素添加到地图时,你必须将它添加到这个键的列表中,即

public void add(String key, String value) {
    List<String> list = map.get(key);
    if (list == null) { //if the list does not exist, create it, only once
        list = new ArrayList<String>();
        map.put(key, list);
    }
    list.add(value);
}

现在,当你想用这个键获取所有元素时:

List<String> elements = map.get("two");

列表将包含您添加的所有元素。

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    相关资源
    最近更新 更多