Der*_*rek 29 java iteration hashmap
我试图使用HashMap将唯一的字符串映射到字符串ArrayList,如下所示:
HashMap<String, ArrayList<String>>
Run Code Online (Sandbox Code Playgroud)
基本上,我希望能够通过编号访问密钥,而不是使用密钥的名称.我希望能够访问所述密钥的值,迭代它.我想象的是这样的:
for(all keys in my hashmap) {
for(int i=0; i < myhashmap.currentKey.getValue.size(); i++) {
// do things with the hashmaps elements
}
}
Run Code Online (Sandbox Code Playgroud)
是否有捷径可寻?
小智 64
如果您真的只想要第一个键的值,这是一般解决方案
Object firstKey = myHashMap.keySet().toArray()[0];
Object valueForFirstKey = myHashMap.get(firstKey);
Run Code Online (Sandbox Code Playgroud)
Cam*_*ner 34
您可以通过调用迭代密钥map.keySet(),或通过调用迭代条目map.entrySet().迭代条目可能会更快.
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
List<String> list = entry.getValue();
// Do things with the list
}
Run Code Online (Sandbox Code Playgroud)
如果你想确保按照插入它们的顺序迭代键,那么使用a LinkedHashMap.
顺便说一句,我建议将地图的声明类型更改为<String, List<String>>.总是最好根据接口而不是实现来声明类型.
Kotlin HashMap 答案
您可以通过索引获取键。然后通过key获取value。
val item = HashMap<String, String>() // Dummy HashMap.
val keyByIndex = item.keys.elementAt(0) // Get key by index. I selected "0".
val valueOfElement = item.getValue(keyByIndex) // Get value.
Run Code Online (Sandbox Code Playgroud)
除非您使用LinkedHashMap或,否则不会订购HashMaps SortedMap.在这种情况下,您可能需要一个LinkedHashMap.这将按插入顺序迭代(或者如果您愿意,按照上次访问的顺序).在这种情况下,它会
int index = 0;
for ( Map.Entry<String,ArrayList<String>> e : myHashMap.iterator().entrySet() ) {
String key = e.getKey();
ArrayList<String> val = e.getValue();
index++;
}
Run Code Online (Sandbox Code Playgroud)
地图中没有直接的get(索引),因为它是一个无序的键/值对列表.LinkedHashMap是一个保持秩序的特殊情况.