如何从HashMap的位置检索一个元素,有没有可能?是否可以通过它的位置从HashMap中获取元素?
回答
这并没有真正回答这个问题。下面的其他答案更有用。 – forresthopkinsa
尊敬的是,这引用了*直接回答问题 –
的文档。即使订单在一段时间内不是恒定的,仍可以通过给定的位置检索其中一个成员。 – Beginner
使用LinkedHashMap
:Map接口的
的哈希表和链接列表实现,具有可预知的迭代顺序。这个实现与HashMap的不同之处在于它保持了一个双向链表,它贯穿其所有条目。
HashMap - 和底层数据结构 - 哈希表没有位置的概念。与LinkedList或Vector不同,输入密钥被转换为存储值的“桶”。这些存储区的排列方式并不是在HashMap接口之外有意义,因此,在您认为其他数据结构的意义上,您放入HashMap的项目并不按顺序排列。
HashMap没有概念的位置,所以没有办法按位置获取对象。地图中的对象是通过键设置和获取的。
我假设你的位置是指你将元素插入到HashMap中的顺序。在这种情况下,你想要使用LinkedHashMap。然而,LinkedHashMap不提供访问器方法;你需要写一个像
public Object getElementAt(LinkedHashMap map, int index) {
for (Map.Entry entry : map.entrySet()) {
if (index-- == 0) {
return entry.value();
}
}
return null;
}
包含HashMap不允许按位置访问,只知道大概的散列码与和它可以检索值,如果它可以计算出密钥的哈希码。 TreeMaps有一个排序的概念。 Linkedhas地图保留了他们进入地图的顺序。
使用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);
总是需要从HashMap实例化一个密钥的副本? – Richard
使用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;
}
该函数可以返回所选条目。
如果要维护将元素添加到地图的顺序,请使用LinkedHashMap
而不仅仅是HashMap
。
这里有一个方法,可以让你通过它在地图索引得到一个值:
public Object getElementByIndex(LinkedHashMap map,int index){
return map.get((map.keySet().toArray())[ index ]);
}
最简单的我必须说...而不是转换每一件事,你只使用键盘。精湛的 – kirtan403
你可以尝试实施类似的东西,看看:
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
我希望这对你有用。
另一种工作方法是将地图值转换为数组,然后在索引处检索元素。使用以下方法100000个对象的LinkedHashMap 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的索引中的所有元素检索似乎是相当繁重的操作。
如果出于某种原因,必须坚持HashMap中,你可以密钥集转换为数组和索引键数组中得到的值在地图上像这样:
Object[] keys = map.keySet().toArray();
然后你可以访问地图,如:
map.get(keys[i]);
请注意,arr [i]应改为:keys [i] –
- 1. 通过javascript获取元素的位置
- 2. 是否可以获取元素的CSS?
- 3. 是否可以通过其中心定位元素?
- 4. 是否可以通过Arrays.sort排序HashMap
- 5. 在HTML/Javascript中,无论鼠标位置如何,我是否可以通过坐标获取元素?
- 6. 是否可以从HTML5音频元素获取Icecast元数据?
- 7. 是否可以获取vuejs元素的DOM元素?
- 8. 是否可以获取dom元素相对父窗口的位置?
- 9. Deque通过它的位置获取值
- 10. 我可以在NSAttributedString中获取元素的位置吗?
- 11. 获取元素的位置/位置
- 12. 是否有可能通过MongoDB C#查询获取元素在数组中的位置?
- 13. 我可以通过iPhone SDK中的标签获取元素吗?
- 14. 是否可以从一个HashMap方法获取Interger和String值?
- 15. 是否可以通过Phonegap获取iOS应用推送设置?
- 16. 通过javascript获取元素相对于moniter的位置
- 17. 如何通过页面上的位置获取元素?
- 18. 无法通过jquery获取绝对位置元素的宽度
- 19. 检测一个元素是否有位置:通过jQuery修复(可能通过父元素)
- 20. 从外部DIv获取元素位置
- 21. 获取元素位置scrollTop
- 22. 是否可以使用`position:relative`来模拟`position:absolute`元素的位置?
- 23. 在selenium webdriver ruby中可以通过类来获取元素吗?
- 24. 是否可以通过HTML5/jQuery从视频获取HTTP标头?
- 25. 是否可以通过fopen从png获取数据?
- 26. 获取元素在Javascript中的位置
- 27. 获取数组元素中的位置
- 28. 可通过API获取照片位置?
- 29. 即使在Javascript中也可以通过触摸获取位置
- 30. 从阵列获取元素通过
你是什么意思的“位置”?哈希地图不是有序的,所以它们没有像“矢量”那样的“位置”通常的概念。 – Mat
您的意思是它的插入顺序或其他顺序? –
@Mark:广告订单。 – Eugene