Преобразование карты в список - PullRequest
3 голосов
/ 22 августа 2011

Есть ли кто-нибудь, кто знает, как преобразовать карту в список

Я нашел здесь что-то вроде этого:

List<Value> list = new ArrayList<Value>(map.values());

Но это будет хранить только значение картыв список

Что я хочу сделать: скопировать ключ и значение в список

Итак, вы знаете, как этого добиться?

Ответы [ 4 ]

9 голосов
/ 22 августа 2011

Это даст вам список записей на карте:

List<Map.Entry<Key, Value>> list = 
    new ArrayList<Map.Entry<Key, Value>>(map.entrySet());

К вашему сведению, записи имеют метод getKey() и getValue().

3 голосов
/ 22 августа 2011

Один из способов сделать это - создать список, добавив все ключи, например:

List list = new ArrayList(map.keySet());

Затем добавьте все значения, например:

 list.addAll(map.values);

И, возможно, вам придетсяДоступ с индексом, как: если размер карты 10, вы знаете, что у вас есть 20 элементов в списке.Таким образом, вы должны написать логику для доступа к ключу-значению из списка с правильным вычислением индекса как: size / 2 что-то вроде этого.Я не уверен, поможет ли это, каково ваше требование.

3 голосов
/ 22 августа 2011

Попробуйте сохранить Map.Entry с map:

new ArrayList<Entry<Key, Value>>(map.entrySet());

Пример:

public static void main(String[] args) {

    Map<String, Integer> map = new HashMap<String, Integer>();

    map.put("Hello", 0);
    map.put("World!", 1);

    ArrayList<Entry<String, Integer>> list =
        new ArrayList<Entry<String, Integer>>(map.entrySet());

    System.out.println(list.get(0).getKey() + " -> " + list.get(0).getValue());
}
2 голосов
/ 22 августа 2011

Оба @Bohemian и @dacwe правы. Более того, я бы сказал: в большинстве случаев вам не нужно создавать свой собственный список. Просто используйте map.entrySet(). Он возвращает Set, но Set - это просто Collection, которая позволяет перебирать его элементы. Итерации достаточно в 95% случаев.

...