Java HashMap добавляет значение в начало списка - PullRequest
2 голосов
/ 28 февраля 2011

Я работал над java HashMaps и обнаружил, что он добавляет значения в начало списка. Например,

hm.put (микрофон, 2); hm.put (Андрюо, 3);

Теперь, если я распечатываю hasmap с помощью итератора, я получаю

Андрей 3

Майк 2

Я хочу, чтобы элементы добавлялись в моде FIFO, а не в моде LIFO ... Есть ли способ сделать это?

Ответы [ 3 ]

7 голосов
/ 28 февраля 2011

Попробуйте использовать LinkedHashMap .Я не думаю, что HashMaps гарантирует заказ.

LinkedHashMap<String,String> lHashMap = new LinkedHashMap<String,String>();

    lHashMap.put("1", "One");
    lHashMap.put("2", "Two");
    lHashMap.put("3", "Three");

    Collection c = lHashMap.values();
    Iterator itr = c.iterator();

    while (itr.hasNext()){
      System.out.println(itr.next());
    }

output

One
Two
Three
7 голосов
/ 28 февраля 2011

Абстракция карты в Java плохо сочетается с понятиями LIFO или FIFO. Эти концепции в основном применяются к упорядоченным последовательностям, в то время как Карты хранятся в порядке, полностью независимом от порядка, в который вставляются значения, чтобы максимизировать эффективность. Например, HashMap использует хеширование для хранения своих значений, и чем более случайным образом хэш-функция распределяет свои значения, тем выше производительность. Точно так же TreeMap использует сбалансированное двоичное дерево поиска, которое хранит его значения в отсортированном порядке, чтобы гарантировать быстрый поиск.

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

Надеюсь, это поможет!

1 голос
/ 28 февраля 2011

Хотите использовать очередь?

http://download.oracle.com/javase/6/docs/api/java/util/Queue.html

HashMaps не упорядочены, тот факт, что вы возвращаете их из итератора в «неправильном» порядке, является просто функцией того, как происходит хеширование ключа.

Как конкретно вы хотите использовать эту структуру данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...