高大的毛衣 · SQL老司机,在SQL中计算 array ...· 6 月前 · |
面冷心慈的小熊猫 · 太赞了!Github上都没有的“网约车”项目 ...· 9 月前 · |
曾深爱过的蛋挞 · Python ...· 1 年前 · |
含蓄的汉堡包 · H5获取用户位置信息,以及相关的坑_钉钉挂在 ...· 1 年前 · |
如何根据元素的位置从HashMap中检索元素,这是可能的吗?
使用LinkedHashMap,当您需要按位置检索时,将值转换为ArrayList。
LinkedHashMap<String,String> linkedHashMap = new LinkedHashMap<String,String>();
/* Populate */
linkedHashMap.put("key0","value0");
linkedHashMap.put("key1","value1");
linkedHashMap.put("key2","value2");
/* Get by position */
int pos = 1;
String value = (new ArrayList<String>(linkedHashMap.values())).get(pos);
使用LinkedHashMap并使用此函数。
private LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
像这样定义和。
private Entry getEntry(int id){
Iterator iterator = map.entrySet().iterator();
int n = 0;
while(iterator.hasNext()){
Entry entry = (Entry) iterator.next();
if(n == id){
return entry;
n ++;
return null;
}
该函数可以返回所选条目。
你可以尝试实现这样的东西,看一下:
Map<String, Integer> map = new LinkedHashMap<String, Integer>();
map.put("juan", 2);
map.put("pedro", 3);
map.put("pablo", 5);
map.put("iphoncio",9)
List<String> indexes = new ArrayList<String>(map.keySet()); // <== Parse
System.out.println(indexes.indexOf("juan")); // ==> 0
System.out.println(indexes.indexOf("iphoncio")); // ==> 3
我希望这对你有用。
另一种可行的方法是将映射值转换为数组,然后在索引处检索元素。使用以下方法在LinkedHashMap中对100,000个对象进行100,000个元素的索引搜索的测试运行产生了以下结果:
//My answer:
public Particle getElementByIndex(LinkedHashMap<Point, Particle> map,int index){
return map.values().toArray(new Particle[map.values().size()])[index];
} //68 965 ms
//Syd Lambert's answer:
public Particle getElementByIndex(LinkedHashMap<Point, Particle> map,int index){
return map.get( (map.keySet().toArray())[ index ] );
} //80 700 ms
总而言之,从LinkedHashMap中按索引检索元素似乎是一项相当繁重的操作。
默认情况下,java LinkedHasMap不支持按位置获取值。所以我建议使用定制的
IndexedLinkedHashMap
public class IndexedLinkedHashMap<K, V> extends LinkedHashMap<K, V> {
private ArrayList<K> keysList = new ArrayList<>();
public void add(K key, V val) {
super.put(key, val);
keysList.add(key);
public void update(K key, V val) {
super.put(key, val);
public void removeItemByKey(K key) {
super.remove(key);
keysList.remove(key);
public void removeItemByIndex(int index) {
super.remove(keysList.get(index));
keysList.remove(index);
public V getItemByIndex(int i) {
return (V) super.get(keysList.get(i));