Поддерживает ли 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));
}
}
}
Ответы
Ответ 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.