关于java:如何将hashmap转换为条目数组

How to convert hashmap to Array of entries

本问题已经有最佳答案,请猛点这里访问。

我有一张地图

private HashMap map;

我想把它转换成数组,但当我这样做时,我得到了:

1
2
Entry<Character, Integer> t = map.entrySet().toArray();    
**Type mismatch: cannot convert from Object[] to Map.Entry<Character,Integer>**
1
2
3
Entry<Character, Integer>[] t = null;
map.entrySet().toArray(t);
**Exception in thread"main" java.lang.NullPointerException**
1
2
3
Entry<Character, Integer>[] t = new Entry<Character, Integer>[1];
map.entrySet().toArray(t);
   **Cannot create a generic array of Map.Entry<Character,Integer>**
1
2
3
Entry<Character, Integer>[] t = null;
t = map.entrySet().toArray(t);
**Exception in thread"main" java.lang.NullPointerException**

那么如何将HashMap转换成Array?其他学科的答案都不起作用。


我认为这是可行的:

1
2
Entry<Character, Integer>[] t = (Entry<Character, Integer>[])
        (map.entrySet().toArray(new Map.Entry[map.size()]));

…但是您需要一个@suppress warning注释来禁止有关不安全类型转换的警告。


我不确定你到底是怎么想的。我要做的是

当您这样做时,您将得到一个entryset,因此数据将存储为entry。

所以如果你想把它放在入口,你可以这样做:

1
2
3
4
5
List<Entry<Character, Integer>> list = new ArrayList<Entry<Character, Integer>>();

for(Entry<Character, Integer> entry : map.entrySet()) {
    list.add(entry);
}

另外请注意,在执行此操作时,您总是会得到不同的顺序,因为hashmap没有排序。

或者,您可以执行一个类来保存条目数据:

1
2
3
4
5
6
7
8
9
public class Data {
    public Character character;
    public Integer value;

    public Data(Character char, Integer value) {
       this.character = character;
       this.value = value;
    }
}

并用以下方法提取:

1
2
3
4
5
List<Data> list = new ArrayList<Data>();

for(Entry<Character, Integer> entry : map.entrySet()) {
    list.add(new Data(entry.getKey(), entry.getValue()));
}