【问题标题】:hasmap return key and value methods give incorrect outputhashmap 返回键和值方法给出不正确的输出
【发布时间】:2014-02-20 19:44:23
【问题描述】:

我想创建返回相同名字和姓氏数量的方法,但是当我尝试测试和编译代码时,我得到输出 1 , 1 ,但事实并非如此。因为有 10 个相同的名字和 10 个相同的姓氏。

public class Solution
{
    public static void main(String[] args)
    {
        HashMap<String, String> map = createMap();
        System.out.println(getCountTheSameFirstName(map, "test"));
        System.out.println(getCountTheSameLastName(map, "test"));
    }
    public static HashMap<String, String> createMap()
    {
        HashMap<String, String> odin = new HashMap<String, String>();
        odin.put("test","test");
        odin.put("test","test");
        odin.put("test","test");
        odin.put("test","test");
        odin.put("test","test");
        odin.put("test","test");
        odin.put("test","test");
        odin.put("test","test");
        odin.put("test","test");
        odin.put("test","test");

         return odin;
    }

    public static int getCountTheSameFirstName(HashMap<String, String> map, String name)
    {
        int count = 0;
        for(Map.Entry<String, String> lol : map.entrySet()){

        String value = lol.getValue();
            if(name.equals(value)){
                count++;
            }
    }
        return count;
    }

    public static int getCountTheSameLastName(HashMap<String, String> map, String familiy)
    {
        int count=0;
        for (Map.Entry<String,String> pair : map.entrySet())
        {
            String key = pair.getKey();
            if (familiy.equals(key))
            {
                count++;
            }
        }
        return count;
    }
}

【问题讨论】:

    标签: java hashmap set


    【解决方案1】:

    请查阅HashMap-API,它的定义是正确的:“将指定值与此映射中的指定键相关联。如果映射先前包含键的映射,则替换旧值。” (http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html#put(K, V))

    【讨论】:

      【解决方案2】:

      对不起!!如果你不使用重复键,那么你必须得到输出 10 & 0

      您的代码:只是我更改了密钥并得到了输出 10 & 0:

      public class Solution
      {
          public static void main(String[] args)
          {
              HashMap<String, String> map = createMap();
              System.out.println(getCountTheSameFirstName(map, "test"));
              System.out.println(getCountTheSameLastName(map, "test"));
          }
          public static HashMap<String, String> createMap()
          {
              HashMap<String, String> odin = new HashMap<String, String>();
              odin.put("0","test");
              odin.put("1","test");
              odin.put("2","test");
              odin.put("3","test");
              odin.put("4","test");
              odin.put("5","test");
              odin.put("6","test");
              odin.put("7","test");
              odin.put("8","test");
              odin.put("9","test");
      
              return odin;
          }
      
          public static int getCountTheSameFirstName(HashMap<String, String> map, String name)
          {
              int count = 0;
              for(Map.Entry<String, String> lol : map.entrySet()){
      
                  String value = lol.getValue();
                  if(name.equals(value)){
                      count++;
                  }
              }
              return count;
          }
      
          public static int getCountTheSameLastName(HashMap<String, String> map, String familiy)
          {
              int count=0;
              for (Map.Entry<String,String> pair : map.entrySet())
              {
                  String key = pair.getKey();
                  if (familiy.equals(key))
                  {
                      count++;
                  }
              }
              return count;
          }
      }
      

      【讨论】:

      • 对不起米津!!我想发表评论,但当时我不允许添加任何评论:(
      • 没问题。 Predict_it 对您的回答感到满意,在这种情况下可以。
      【解决方案3】:

      您正在插入相同的密钥10 次。第一个put 有效,但随后的每个put 都用相同的映射替换旧的键/值映射。最终结果是Map 中只有一个键/值对,这就是为什么您会得到1 作为输出。

      【讨论】:

      • 我将键更改为 1 2 2 2 3 4 5 6 ,我得到输出 0 , 0
      【解决方案4】:

      简而言之:您的方法按照 HashMap 的设计工作 - 您强制使用相同的键放入 HashMap 并第一次向映射添加值,而其他任何时候您只需更改此元素的值,因为它有相同的钥匙。

      说明:

      你有这种情况 - 你是这样创建 HashMap 的:

      HashMap<String, String> odin = new HashMap<String, String>();
      

      有第一个字符串键和第二个字符串值。当您使用 line 添加值时:

      odin.put("test","test");
      

      你是关键测试的设定值测试。

      如果您重复此操作,您将使用带有关键测试的新元素更改带有关键测试的旧元素

      这个结果是输入的值被替换了。

      除此之外,您必须在 HashMap 中放入具有唯一键的其他内容(例如数组)。在这种情况下,您可以有 10 个具有相同值的输入。

      这里是这个 HashMap 的例子:

      HashMap<String, String[]> odin = new HashMap<String, String[]>();
      

      在这种情况下,您必须提供字符串键和字符串数组,其中包含值(您问题中的名字和姓氏)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多