Convert Hash Map to 2D Array

21,379

Solution 1

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++;
}

Solution 2

This can only be done when the types of both key and value are the same.

Given:

HashMap<String,String> map;

I can create an array from this map with this simple loop:

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++;
}

Solution 3

How about

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

Or, to be more specific about the types, let's say they're Strings: Set's toArray takes a hint argument, so that

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

Edit: I just realized a couple of days later that while this may work by chance, in general it shouldn't. The reason is the intermediate Set; although it is "backed by the map", there seems to be no explicit guarantee that it will iterate in any particular order. Thus the key- and entry-arrays might not be in the same order, which is a disaster for sure!

Share:
21,379

Related videos on Youtube

Anto
Author by

Anto

click here to edit

Updated on February 09, 2021

Comments

  • Anto
    Anto over 3 years

    What is the easiest way to convert a HashMap into a 2D array?

    • Алексей Виноградов
      Алексей Виноградов over 4 years
      For Java 8+ do it with streams: relative stack topic
  • Simon Baars
    Simon Baars over 7 years
    Can we create a oneliner now we have streams?
  • Qohelet
    Qohelet about 5 years
    I do like your approach as you're able to do it in one-liners. Yet, why are you using map.keySet and map.entrySet instead of map.keySet() and map.entrySet()
  • Somu
    Somu over 3 years
    See one-liner with Java 8 streams here