【问题标题】:Retrieving the value of hashmap with simple core java code使用简单的核心 java 代码检索 hashmap 的值
【发布时间】:2012-08-05 15:52:19
【问题描述】:

我有以下查询,我在下面有这个是 hashmap 类..

 HashMap map=new HashMap();//HashMap key random order.
         System.out.println("Amit".hashCode());
         map.put("Amit","Java");
         map.put("mAit","J2EE");
         map.put("Saral","J2rrrEE");

如果我想在控制台上检索数组的元素以查看输出,代码将如下所示..

Set s=map.entrySet();
         Iterator itr=s.iterator();
         while(itr.hasNext())
         {
             Map.Entry m=(Map.Entry)itr.next();
             System.out.println(m.getKey()+"\t"+m.getValue()+"\t"+ m.hashCode());
          }

现在我们将它转​​换为 map.entry ,因为它是必需的,我们有称为 getkey() 和 getvalue() 的方法,我也很清楚 map.entry ,但我想在没有这些内置函数的情况下检索数组通过简单的核心java代码,请告知如何实现..!

我不想使用任何内置的集合函数,例如 getkey() 或 getvalue() 来检索地图的内容,我想使用简单的 java 代码来检索给定键的值或全部键必须在 getkey() 和 getvalue() 背后有一些逻辑,这些逻辑构建在我想使用的核心 java 之上..!!

有没有什么方法可以通过简单的java程序本身来检索地图的内容..!!不使用内置的集合函数..!

【问题讨论】:

  • without using built in collection functions..! - 好像你去的学校教错了。内置集合函数被内置以供......使用。
  • 刚刚看到您的编辑:您到底为什么要这样做?要么是出于教育目的,您可以简单地查看源代码,或者......我找不到其他原因......

标签: java collections hashmap


【解决方案1】:

我不确定您要查找的数组,您的代码中没有数组。

您可以通过使用泛型来简化您的生活。将您的地图声明为:

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

您的第二个 sn-p 可以用增强的 for 循环编写:

for (Map.Entry<String, String> m : map.entrySet()) {
    System.out.println(m.getKey()+"\t"+m.getValue()+"\t"+ m.hashCode());
}

如果您只想获取标题所暗示的值:

for (String value : map.values()) {
    System.out.println(value);
}

【讨论】:

    【解决方案2】:

    您可以使用 keyset() 或 values() 函数来获取键的集合或值的集合。

    我不想使用任何内置的集合函数,例如 getkey() 或 getvalue() 来检索地图的内容

    如果它是您所追求的哈希图的内部表示,请远离它。内部数据结构旨在抽象哈希图的内部结构。与普通散列图相比,链接散列图可以用不同的方式表示。你为什么要访问内部结构呢?没有 API 开发人员允许访问这些表示。

    如果你不顾一切,你可以随时查找 hashmap 的私有成员变量并通过反射访问它们。但同样,请仅将此类解决方案用于学术目的。

    【讨论】:

      【解决方案3】:

      我认为您不了解 OOP 的概念。 HashMap 是一个类,当你说new HashMap() 时,你创建了这个类的一个新对象。这个类有一些私有字段,可能是一个数组或类似的东西。但关键是,你不知道。该类隐藏了它的字段——它们是私有的。要访问这些字段并使用它们,该类提供了方法。例如。一个名为put(...) 的方法来添加一个新元素,或者一个名为get(...) 的方法来检索一个元素。

      您不能使用任何核心 Java 东西来访问这些字段 - 没有任何语法可以访问类的私有字段。您可以只使用 HashMap 的方法,没有其他(简单)方法。 (嗯,还有反思,但那完全是另一个话题了……)。

      当然,HashMap 是用一些“核心 Java”编写的。如果您对它的外观感兴趣,请查看源代码java.util.HashMap

      【讨论】:

        【解决方案4】:

        您要检索的Map.Entrys 数组是HashMap 私有的,不能直接访问。但是您不必为此担心,因为您总是可以从入口集中获取另一个数组实例:

        Set s=map.entrySet();
        Map.Entry[] entries = s.toArray(new Map.Entry[0]);
        

        编辑后:

        为什么要避免使用 HashMap 提供的 api 来检索给定键的值? iteratorgetKey()getValue() 中的逻辑不能在这些方法之外复制,因为只有这些方法可以访问HashMap 的私有状态。即使您可以在这些方法之外复制逻辑,这也会破坏面向对象编程的所有原则,所以 - 不要那样做!

        【讨论】:

          【解决方案5】:

          试试这个values()方法

          for (String sVal : map.values()) {
          
              System.out.println("Your values :"+ sVal);
          }
          

          【讨论】:

          • 请不要再使用匈牙利符号了... :(
          【解决方案6】:

          通过使用这个增强的 for 循环,我们可以轻松地从 map 中检索值

          for (String variable : map.values()) {
              System.out.println(variable);
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-11-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多