如何将<String,Integer>类型的HashMap转为对应数组?相关实现是否安全?
问题解答
首先你给出的遍历实现完全不可行,存在多处语法错误和逻辑漏洞:
- 循环内重复重置索引:
int n = 0写在循环体内部,每次循环都会将索引重置为0,永远只能操作数组的第0位,n++的操作没有实际意义 - 数组声明语法错误:
String key[n]=val.getKey();不符合Java语法规范,不能在声明数组的同时直接给数组对象赋值为单个字符串,这行代码本身就无法通过编译 - 未提前初始化数组:你没有提前根据HashMap的长度创建对应大小的数组,每次循环尝试新建数组的逻辑完全错误
关于你担心的数组不匹配问题
只要你在连续调用hashmap.keySet().toArray()和hashmap.values().toArray()的过程中,没有对HashMap做增、删、改这类修改结构的操作,两个数组的顺序是完全对应的,不存在内容不匹配的风险,Java中HashMap的keySet、values、entrySet的迭代顺序是一致的,只要Map结构没有发生变化,遍历顺序就不会变。
正确的实现方式
遍历entrySet的写法
// 提前初始化对应长度的数组 int size = hashmap.size(); String[] keyArray = new String[size]; Integer[] valueArray = new Integer[size]; int index = 0; for (Map.Entry<String, Integer> entry : hashmap.entrySet()) { keyArray[index] = entry.getKey(); valueArray[index] = entry.getValue(); index++; }
直接调用toArray的简化写法(Java 8及以上可用)
String[] keyArray = hashmap.keySet().toArray(new String[0]); Integer[] valueArray = hashmap.values().toArray(new Integer[0]);
内容的提问来源于stack exchange,提问作者JPep26
相关产品推荐
相关产品推荐

