1

我想编写一个程序,打印出 HashMap 的条目“0”和“4”(即 entry.getKey(0) 和 entry.getKey(4),但它不会让我这样做) 另一种方法是什么使用我已经拥有的东西?

基本上我有这个:

HashMap<String, Integer> hm = new HashMap<String, Integer>();

我可以使用以下代码遍历每个条目:

for (Map.Entry<String,Integer> entry : hm.entrySet())
{
    System.out.println(entry.getKey() + "/" + entry.getValue());
}

由于人们要求提供更多上下文信息,因此我将一组字符串存储在 HashMap 中。例如,第 0 个条目是“Bob”,第 1 个条目是“Mindy”,第 2 个是“Yasser”,第 3 个是“Greg”,第 4 个是“Jacky”。我希望程序打印出填充的 HashMap 的第 0 个和第 4 个条目。

4

6 回答 6

3

如果对 中的键比较具体Map,可以直接使用方法。像get()这样,

Integer value = hm.get("0");

如果你想迭代然后使用类似下面的代码:

HashMap<String, Integer> hm = new HashMap<String, Integer>();
for (Entry<String, Integer> entry : hm.entrySet())
{
    String key = entry.getKey();
    if(key.equals("0") || key.equals("1"))
    System.out.println(key + "/" + entry.getValue());
}

您不能将索引传递给getKey()诸如此类的方法getKey(0)。请参阅文档。

HashMap 类不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。因此,如果您要从HashMap基于索引的索引中获取值,则可能是不可能的。最接近您的要求将类似于LinkedHashMap,它维护插入/访问顺序的键顺序。

HashMap根据散列原理工作,我们有存储和检索对象的put(key, value)方法。当我们将 Key 和 Value 对象传递给Java 上的方法时,实现调用Key 对象上的方法并应用返回到它自己的哈希函数中以找到存储对象的存储桶位置,重要的一点是 Java 中的 HashMap 存储键和值对象就像在桶中一样,这对于理解检索逻辑至关重要。get(key)HashMapput()HashMapHashMaphashCode()hashcode()EntryMap.Entry

于 2013-05-12T06:14:35.267 回答
2

HashMap 没有定义的键顺序。您可以使用 LinkedHashMap 而不是 HashMap 它在调用 keySet() 时总是会以相同的顺序(作为插入)返回键。然后您选择第 0 或第 4 个键。稍后您可以检索在第 0 和第 4 个位置获取的键的值。

于 2013-05-12T06:13:36.657 回答
1

我建议简单地使用 get() 方法和提供的密钥。在这种情况下不需要迭代。

于 2013-05-12T06:18:14.967 回答
0

由于人们要求提供更多上下文信息,因此我将一组字符串存储在 HashMap 中。例如,第 0 个条目是“Bob”,第 1 个条目是“Mindy”,第 2 个是“Yasser”,第 3 个是“Greg”,第 4 个是“Jacky”。我希望程序打印出填充的 HashMap 的第 0 个和第 4 个条目。

就它的使用方式而言,HashMap没有任何意义。改用a String[]

    String[] names = {"Bob", "Mindy", "Yasser", "Greg", "Jacky" };
    System.out.println("When " + names[0] + " met " + names[4]);
于 2013-05-12T06:42:07.697 回答
0

为什么不采取有针对性的方法:

String[] targets = {"0", "4"};
for (String target : targets) {
    System.out.println(target + "/" + hm.get(target));
}

比“大锤”全迭代方法效率更高,并且您可以免费获得输出订单。

于 2013-05-12T06:44:51.500 回答
0

如果您的地图中有很多条目,您可能会考虑使用其中一种可导航的集合,例如 TreeMap。

    NavigableMap<String,String> map = new TreeMap<>()
    map.subMap("0", true, "4", true);

访问:http ://docs.oracle.com/javase/6/docs/api/java/util/NavigableMap.html

于 2013-05-12T06:46:27.840 回答