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

Как сохранить порядок вставки

Я хочу добавить ключ, пару значений в хеш-таблицу (или любую другую коллекцию), но должен поддерживать порядок вставки. Как я могу это сделать?

Как я добавлю 1 в качестве ключа "один" в качестве значения, 2 в качестве ключа и "два" в качестве значения.

Выход должен быть:

1:one
2:two
4b9b3361

Ответ 1

Вот характерные отличия некоторых важных реализаций Map:

  • LinkedHashMap: "с предсказуемым порядком итераций [...], который обычно является порядком, в котором ключи были вставлены в карту (порядок вставки)".
  • HashMap: "не дает никаких гарантий относительно порядка карты"
  • TreeMap: "сортируется в соответствии с естественным упорядочением ключей или Comparator "

Похоже, что LinkedHashMap - это то, что вам нужно в этом случае.

Здесь фрагмент, чтобы проиллюстрировать различия; он также показывает общий способ итерации по всем элементам Map и то, как использование интерфейса для ссылки на объекты обеспечивает большую гибкость выбора реализации.

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

Смежные вопросы

Похожие вопросы

Ответ 2

Для хэш-таблицы используйте LinkedHashMap класс.

Ответ 3

Ваш поиск заканчивается на LinkedHashMap.....:)