[英]How to sort a Java Hashtable?
我將一些數據插入Java Hashtable。 如果我從Hashtable讀取數據,它的返回順序與我插入的順序不同。如何從Hashtable獲取有序數據?
我使用以下代碼從哈希表中獲取值:
// Get a set of the entries
Set set = hsUpdateValues.entrySet();
// Get an iterator
Iterator i = set.iterator();
// Display elements
while (i.hasNext()) {
Map.Entry me = (Map.Entry) i.next();
System.out.print(
"Key : " + me.getKey()
+ ", Value: " + me.getValue()
);
}
如果您想要一個保留訂單的地圖,您應該使用LinkedHashMap
:
Map接口的哈希表和鏈表實現,具有可預測的迭代順序。 此實現與HashMap的不同之處在於它維護了一個貫穿其所有條目的雙向鏈表。 此鏈接列表定義迭代排序,通常是鍵插入映射的順序(插入順序)。 請注意,如果將鍵重新插入地圖,則插入順序不會受到影響。 (A鍵
k
被重新插入到地圖m
如果m.put(k, v)
被調用時m.containsKey(k)
將在調用之前立即返回true。)此實現使其客戶端免受
HashMap
(和Hashtable
)提供的未指定的,通常混亂的排序,而不會導致與TreeMap
相關的成本增加。
請注意,這通常與HashMap
而不是Hashtable
- 我不知道保留的順序等同於Hashtable
; 這些天通常不會使用后者(正如ArrayList
通常優先使用Vector
)。
我假設你想要插入順序而不是按鍵排序的順序。 如果您想要后者,請使用TreeMap
。
雖然Hashtable
無法排序,但他詢問如何獲取排序數據,可以對從HashTable
提取的密鑰列表進行排序並按順序檢索值。 就像是:
List<'your_type'> tmp = Collections.list('your_hashtable'.keys());
Collections.sort(tmp);
Iterator<'your_type'> it = tmp.iterator();
while(it.hasNext()){
'your_type' element =it.next();
//here you can get ordered things: 'your_hashtable'.get(element);
}
會沒事的。
Hashtable
沒有可預測的迭代順序,無法排序。 如果您只想要可預測的迭代順序,則應使用LinkedHashMap
。 如果您希望能夠對Map
進行排序,則應使用TreeMap
。
使用TreeMap對其進行排序:
Map<String, String> yourMap = new HashMap<String, String>();
yourMap.put("1", "one");
yourMap.put("2", "two");
yourMap.put("3", "three");
Map<String, String> sortedMap = new TreeMap<String, String>(yourMap);
Hashtable
是一個遺留的集合,在1998年被Java 1.2集合取代。我建議你避免它,以及Vector
和Enumeration
。
而不是Hashtable
盡可能使用HashMap
。 如果需要,可以使用Collections.synchronizedMap(map)
添加同步。
而不是Vector
,盡可能使用ArrayList
。 如果需要,可以使用Collections.synchronizedList(map)
添加同步。
您可以使用Iterator
甚至for-each
循環代替Enumeration
。
如果我從哈希表中讀取數據,它的輸入順序與我插入的順序不同。
你的問題沒有意義。 Hashtable沒有“訂單”,它是無序的(編輯:某些實現確實有一個訂單,但它不常見於哈希表)。
你期望參賽作品的順序是什么?
如果要按特定順序存儲元素,則需要使用列表(例如java.util.List的子類)。
而順便說一句,您的代碼示例甚至不包含哈希表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.