将哈希映射转换为二维数组

时间:2010-02-15 10:29:54

标签: java arrays hashmap

将HashMap转换为2D数组的最简单方法是什么?

5 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:5)

只有当键和值的类型相同时才能执行此操作。

鉴于:

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

答案 2 :(得分:4)

怎么样

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

或者,为了更具体地说明这些类型,我们假设它们是StringsSet的{​​{1}}需要一个提示参数,以便

toArray

编辑:我刚刚意识到,虽然这个可能偶然发挥作用,但总的来说它不应该。原因是中间String[][] array = new String[][]{map.keySet.toArray(new String[0]), map.entrySet.toArray(new String[0])}; ;虽然它是“由地图支持”,但似乎没有明确保证它将以任何特定顺序迭代。因此,密钥和入口阵列的顺序可能不一样,这肯定是一场灾难!

答案 3 :(得分:0)

使用 Java 8 流:

@Test
void testMapToArray() {
    Map<String, Object> map = new HashMap<>();
    map.put("key1", "value1");
    map.put("key2", 2);

    Object[][] arr =
        map.entrySet().stream()
                .map(e -> new Object[]{e.getKey(), e.getValue()})
                .toArray(Object[][]::new);

    System.out.println(Arrays.deepToString(arr));
}

输出:

[[key1, value1], [key2, 2]]

答案 4 :(得分:-1)

使用entrySet迭代您的地图,并使用Entry对象填充您的数组记录