有没有一种方法通过使用索引而不是LinkedHashMap循环来迭代foreach(具有定义的顺序)?我需要使用索引访问元素。

以下代码将打印整个地图:

public void print(Map<String, Integer> map)
{
    for (Map.Entry<String, Integer> entryMap : map.entrySet())
    {
        System.out.println(entryMap.getValue() + " = " + entryMap.getKey());
    }
}


我该如何做,但改用index访问元素?

public void print(Map<String, Integer> map)
{
    for (int i = 0; i< map.size(); i++)
    {
        // getValue() and getKey() are undefined
        System.out.println(map.get(i).getValue() + " = " + map.get(i).getKey());
    }
}


以下仅返回键,但我也需要这些值:

public String getByIndex(Map<String, Integer> map, int index)
{
    List<String> keys = new ArrayList<>(map.keySet());

    return (String) keys.get(index);
}

最佳答案

好吧,您可以编写一种方法来执行此操作。

public static <K, V> Map.Entry<K, V> getEntryByIndex(Map<K, V> map, int i) {
    if(i >= map.size()) {
        throw new IndexOutOfBoundsException(String.valueOf(i));
    }

    // use Iterator
    Iterator<Map.Entry<K, V>> it = map.entrySet().iterator();

    // skip to i
    for(; i > 0; --i) {
        it.next();
    }

    return it.next();
}


这几乎像对待链表一样对待它。如果发现您经常这样做,则可能需要将ArrayList和Map一起永久保存。

10-08 00:45