有没有办法通过使用索引而不是LinkedHashMap
循环来迭代foreach
(具有已定义的顺序)?我需要使用索引来访问元素。
以下代码打印整个地图:
public void print(Map<String, Integer> map)
{
for (Map.Entry<String, Integer> entryMap : map.entrySet())
{
System.out.println(entryMap.getValue() + " = " + entryMap.getKey());
}
}
我怎么能这样做但是使用索引来访问元素呢?
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);
}
答案 0 :(得分:3)
试试这个:
List<String> keys = new ArrayList(map.keySet());
for (int i = 0; i < keys.size(); i++)
{
String key = keys.get(i);
Integer value = map.get(key);
//...
}
答案 1 :(得分:1)
你可以写一个方法来做到这一点。
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。
答案 2 :(得分:0)
可能的解决方法之一是将所有键也放入ArrayList,使用index可以访问它们。直接访问似乎不可能,因为keySet返回一个不支持索引访问的集合。