0

我有以下查询,我在下面有这个是 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 代码来检索给定键的值或那里的所有键的值必须是在我想使用的核心 java 上构建的 getkey() 和 getvalue() 背后的一些逻辑..!!

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

4

6 回答 6

4

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

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

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

您的第二个片段可以用增强的 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);
}
于 2012-08-05T15:59:06.150 回答
3

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

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

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

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

于 2012-08-05T16:23:56.513 回答
2

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

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

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

于 2012-08-05T16:34:05.613 回答
1

The array of Map.Entrys that you want to retrieve is private to the HashMap and cannot be directly accessed. But you should not be worried by that because you can always get another array instance from the entryset:

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

After you edit :

Why do you want to avoid using the api that HashMap provides to retrieve the values given a key ? The logic in the iterator and getKey() and getValue() cannot be replicated outside these methods becuase only these methods have access to the private state of theHashMap. Even if you could replicate the logic outside these methods , that would break all tenets of Object oriented programming, so - dont do that !

于 2012-08-05T16:06:13.597 回答
0

试试这个values()方法

for (String sVal : map.values()) {

    System.out.println("Your values :"+ sVal);
}
于 2012-08-05T16:04:31.437 回答
0

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

for (String variable : map.values()) {
    System.out.println(variable);
}
于 2015-07-09T12:48:41.003 回答