Я хочу добавить ключ, пару значения в хеш-таблицу (или любой другой набор), но иметь для поддержания порядка вставки. Как я могу сделать это?
Как я добавлю 1, как включают "тот" как значение, 2 столь же ключевой и "два" как значение.
Вывод должен быть:
1:one
2:two
Вот характерные отличия некоторых важных реализаций Map
:
LinkedHashMap
: «с предсказуемым порядком итераций [...], который обычно является порядком, в котором ключи были вставлены в карта ( порядок вставки ). « HashMap
:« не дает никаких гарантий относительно порядка отображения » TreeMap
:» сортируется в соответствии с естественным порядком его ключей, или с помощью Компаратора
"
SortedMap
Так что, похоже, LinkedHashMap
- это то, что вам нужно в этом случае.
Вот отрывок, иллюстрирующий различия; он также показывает общий способ перебора всех записей карты
и то, как использование интерфейса для ссылки на объекты обеспечивает большую гибкость выбора реализации.
import java.util.*;
public class MapExample {
public static void main(String[] args) {
populateThenDump(new HashMap<String,Integer>());
populateThenDump(new TreeMap<String,Integer>());
populateThenDump(new LinkedHashMap<String,Integer>());
}
static void populateThenDump(Map<String,Integer> map) {
System.out.println(map.getClass().getName());
map.put("Zero", 0);
map.put("One", 1);
map.put("Two", 2);
map.put("Three", 3);
map.put("Four", 4);
for (Map.Entry<String,Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
}
}
Результатом приведенного выше фрагмента является (, как показано на ideone.com ):
java.util.HashMap // unordered, results may vary
Three => 3
Zero => 0
One => 1
Four => 4
Two => 2
java.util.TreeMap // ordered by String keys lexicographically
Four => 4
One => 1
Three => 3
Two => 2
Zero => 0
java.util.LinkedHashMap // insertion order
Zero => 0
One => 1
Two => 2
Three => 3
Four => 4
Iterator
.