如何從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