Поддерживает ли HashTable порядок вставки? - PullRequest
20 голосов
/ 20 июня 2011

Следующий код дает мне вывод в том же порядке вставки.Я прочитал Javadoc, и они даже не говорили о порядке вставки.Может ли кто-нибудь помочь мне получить правильную информацию.

import java.util.*;

public class hash {

public static void main(String[] args) {

    String str[] = { "japan",
            "usa",
            "japan",
            "russia",
            "usa",
            "japan",
            "japan",
            "australia"};
    int len = 8;
    Hashtable ht = new Hashtable();
    int i = 0;
    while (i < len) {

        String c = str[i];
        System.out.println("c :" + c);
        Integer intg = (Integer) ht.get(c);

        if (intg == null)
            ht.put(c, new Integer(1));
        else
            ht.put(c, new Integer(intg.intValue() + 1));

        i++;
    }

    Enumeration k = ht.keys();

    while (k.hasMoreElements()) {
        String key = (String) k.nextElement();
        System.out.println(key + " > " + ht.get(key));
    }
}
}

Ответы [ 5 ]

40 голосов
/ 20 июня 2011

Нет, это не так. Чтобы сохранить порядок вставки, вместо этого используйте java.util.LinkedHashMap ( javadoc ).

Кроме того, HashMap теперь предпочтительнее, чем Hashtable, потому что Hashtable имеет ненужные издержки параллелизма. (См. Различия между HashMap и Hashtable? .)

9 голосов
/ 20 июня 2011

нет, это не так. он знает только порядок "хэш". если вы измените порядок строк, вы увидите, что они по-прежнему отображаются в том же порядке из хеш-таблицы.

5 голосов
/ 20 июня 2011

Hashtable используется для быстрого поиска, а не для поддержания порядка. Вы должны изучить LinkedHashMap или другие структуры данных.

4 голосов
/ 02 июня 2013

LinkedHashMap используется для поддержания порядка вставки элементов. Hashtable похож на HashMap, но не допускает нулевой ключ или значение, в то время как HashMap допускает один нулевой ключ и несколько нулевых значений ...

3 голосов
/ 20 июня 2011

с карты Javadoc.

Порядок карты определяется как порядок, в котором итераторы в представлениях коллекции карты возвращают свои элементы.Некоторые реализации карт, такие как класс TreeMap, дают определенные гарантии относительно их порядка;другие, такие как класс HashMap, этого не делают.

Также очень полезно заглянуть внутрь кода Hashtable и HashMap.

...