Конвертировать хэш карту в 2D массив - PullRequest
12 голосов
/ 15 февраля 2010

Какой самый простой способ преобразовать HashMap в 2D-массив?

Ответы [ 4 ]

10 голосов
/ 15 февраля 2010
HashMap map = new HashMap();
Object[][] arr = new Object[map.size()][2];
Set entries = map.entrySet();
Iterator entriesIterator = entries.iterator();

int i = 0;
while(entriesIterator.hasNext()){

    Map.Entry mapping = (Map.Entry) entriesIterator.next();

    arr[i][0] = mapping.getKey();
    arr[i][1] = mapping.getValue();

    i++;
}
5 голосов
/ 15 февраля 2010

Это можно сделать только тогда, когда типы ключа и значения совпадают.

Дано:

HashMap<String,String> map;

Я могу создать массив из этой карты с помощью этого простого цикла:

String[][] array = new String[map.size()][2];
int count = 0;
for(Map.Entry<String,String> entry : map.entrySet()){
    array[count][0] = entry.getKey();
    array[count][1] = entry.getValue();
    count++;
}
4 голосов
/ 15 февраля 2010

Как насчет

Object[][] array = new Object[][]{map.keySet.toArray(), map.entrySet.toArray()};

Или, если говорить более конкретно о типах, допустим, что они Strings: Set s toArray принимает аргумент подсказки, так что

String[][] array = new String[][]{map.keySet.toArray(new String[0]), map.entrySet.toArray(new String[0])};

Редактировать: Я только через пару дней осознал, что хотя это может работать случайно, в общем, это не должно. Причина промежуточная Set; хотя он «поддерживается картой», кажется, нет явной гарантии, что он будет повторяться в любом конкретном порядке. Таким образом, массивы ключей и входов могут быть не в одном и том же порядке, что, безусловно, является катастрофой!

0 голосов
/ 15 февраля 2010

Выполните итерацию по вашей карте, используя entrySet , и заполните запись массива объектом Entry

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