0

我写了这个小代码(如下) -

它显示输出Singh。我想知道如何使用单个键s添加 Patel 和 Singh 两个值?

import java.util.*;
public class Practice {
    public static void main(String [] args)
    {
        String s="Sameer";
        HashMap<String,String> map=new HashMap();
        map.put(s, "Patel");
        map.put(s, "Singh");
        String value=map.get(s);
        System.out.println(value);
    }
}

像 s -> Patel,Singh。s 指向这两个值。

4

2 回答 2

0

你不能。map的基本思想是拥有唯一的key

于 2015-05-30T05:22:52.197 回答
0

不,不能这样做,因为地图中的每个值都有一个唯一的键。

您对这些概念的理解感到困惑。我建议先了解 HashMap 的工作原理。链路 1链路 2

我认为您在这里关心的是向同一个存储桶添加新的条目对象,但这并不意味着您可以使用相同的键映射两个值,不,一点也不!

HashMap 中的 Bucket 值存储为EntryClass 的 Objects,其属性为单键和单值 (Value can be simple object or Collection Object).


以下是了解 HashMap 的工作需要了解的一些要点 -

  1. HashMap 有一个名为 Entry 的内部类,用于存储键值对。
  2. 上面的Entry 对象存储在Entry 称为表中。
  3. 表的索引在逻辑上称为桶,它存储链表的第一个元素。
  4. Key 对象的 hashcode() 用于查找该 Entry 对象的存储桶。
  5. 如果两个 key object 具有相同的 hashcode,它们将进入 table 数组的同一个桶中。
  6. 键对象的equals()方法用于保证键对象的唯一性。
  7. 根本不使用值对象的 equals() 和 hashcode() 方法。

您的问题的可能解决方案 -

但是,您可以通过使用由 key 映射的 Collection Object来实现您所需要的,然后您可以遍历集合对象以读取所有值。

下面是使用列表的示例 -

import java.util.*;
 class Practice {
    public static void main(String [] args)
    {
        String s="Sameer";
        HashMap<String,List<String>> map=new HashMap();
        List<String> lastNameList = new ArrayList<String>();
        lastNameList.add("Patel");
        lastNameList.add("Singh");
        map.put(s, lastNameList);
        List<String> getList=(ArrayList)map.get(s);

        for(String val : getList) {
            System.out.println(val);
        }
    }
}

现在输出将是 -

Patel
Singh

您可以将此想法扩展到任何级别。由你决定。

希望它会有所帮助!

于 2015-05-30T05:45:15.197 回答