如何对Java Hashtable进行排序?

Tes*_*ter 8 java sorting maps 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()
    );
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 22

如果您想要一个保留订单的地图,您应该使用LinkedHashMap:

Map接口的哈希表和链表实现,具有可预测的迭代顺序.此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表.此链接列表定义迭代排序,通常是键插入映射的顺序(插入顺序).请注意,如果将键重新插入地图,则插入顺序不会受到影响.(如果在调用之前立即返回true,则调用一个键k重新插入映射.)mm.put(k, v)m.containsKey(k)

这种实现使客户免于HashMap(和Hashtable)提供的未指定的,通常是混乱的排序,而不会产生与之相关的增加的成本TreeMap.

请注意,这通常是与之HashMap比较而不是Hashtable- 我不知道订单保留相当于Hashtable; 这些天通常不会使用后者(正如ArrayList通常优先使用的那样Vector).

我假设你想要插入顺序而不是按键排序的顺序.如果你想要后者,请使用TreeMap.


Bjö*_*örn 7

A Hashtable没有可预测的迭代顺序,无法排序.如果您只想要可预测的迭代顺序,则应使用a LinkedHashMap.如果你想能够对你进行排序Map,你应该使用a TreeMap.


Fil*_*zza 7

虽然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);
}
Run Code Online (Sandbox Code Playgroud)

会没事的.


Pet*_*rey 5

Hashtable是一个遗留集合,在 1998 年被 Java 1.2 集合取代。我建议你避免它,以及VectorEnumeration

而不是在可能的情况下Hashtable使用HashMapCollections.synchronizedMap(map)如果需要,您可以使用添加同步。

代替VectorArrayList在可能的情况下使用。Collections.synchronizedList(map)如果需要,您可以使用添加同步。

而不是Enumeration你可以使用Iterator甚至for-each循环。