我有这个Java Map:
你能告诉我如何获得地图的第6个元素吗?
private static final Map<String, Users> cache = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
这可能吗?或者我必须使用另一个Java集合?
Sag*_*age 26
虽然回答有点迟.但是选项是使用LinkedHashMap
:这个地图根据元素的插入保留顺序,正如大家所建议的那样.但是,作为警告,它有一个构造函数LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
,它将创建一个链接的哈希映射,其迭代顺序是其条目的最后顺序accessed
.在这种情况下不要使用此构造函数.
但是,如果我需要这样的功能,我会扩展它并实现我的必要功能,以OOP方式重用它们.
class MyLinkedMap<K, V> extends LinkedHashMap<K, V>
{
public V getValue(int i)
{
Map.Entry<K, V>entry = this.getEntry(i);
if(entry == null) return null;
return entry.getValue();
}
public Map.Entry<K, V> getEntry(int i)
{
// check if negetive index provided
Set<Map.Entry<K,V>>entries = entrySet();
int j = 0;
for(Map.Entry<K, V>entry : entries)
if(j++ == i)return entry;
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我可以实例化它,并且可以以我想要的方式获得条目和值:
MyLinkedMap<String, Integer>map = new MyLinkedMap<>();
map.put("a first", 1);
map.put("a second", 2);
map.put("a third", 3);
System.out.println(map.getValue(2));
System.out.println(map.getEntry(1));
Run Code Online (Sandbox Code Playgroud)
输出:
3
a second=2
Run Code Online (Sandbox Code Playgroud)
Ruc*_*era 10
HashMap
不接受订单.如果你担心订单,你应该使用LinkedHashMap
Map<String, Users> orderedMap=new LinkedHashMap<>();
Run Code Online (Sandbox Code Playgroud)
现在,当你放置一个元素时,它会保持你所放置的顺序.
如果你想获得第6个元素,现在你可以做到这一点,因为你的元素按顺序排列.
orderedMap.values().toArray()[5]// will give you 6th value in the map.
Run Code Online (Sandbox Code Playgroud)
例
Map<String, String> orderedMap=new LinkedHashMap<>();
orderedMap.put("a","a");
orderedMap.put("b","b");
System.out.println(orderedMap.values().toArray()[1]); // you will get b(value)
System.out.println(orderedMap.keySet().toArray()[1]); // you will get b(key)
}
Run Code Online (Sandbox Code Playgroud)
A HashMap
不保持插入其中的元素的顺序.您可以使用a LinkedHashMap
来维护插入其中的元素的顺序.
虽然您需要注意,即使LinkedHashMap
没有这样的方法也可以在特定索引处给出元素.您必须手动迭代条目并在第6次迭代时提取元素.
归档时间: |
|
查看次数: |
44654 次 |
最近记录: |