Подтвердить что ты не робот

Поддерживает ли HashTable порядок вставки?

Следующий код дает мне вывод в том же порядке вставки. Я прочитал 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));
    }
}
}
4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

Из карты Javadoc.

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

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