如何将hashmap转换为条目数组

时间:2013-05-19 10:33:33

标签: java arrays collections map toarray

我有一张地图

private HashMap<Character, Integer> map;

我想将它转换为数组但是当我这样做时/我得到了这个:

Entry<Character, Integer> t = map.entrySet().toArray();    
**Type mismatch: cannot convert from Object[] to Map.Entry<Character,Integer>**

Entry<Character, Integer>[] t = null;
map.entrySet().toArray(t); 
**Exception in thread "main" java.lang.NullPointerException**

Entry<Character, Integer>[] t = new Entry<Character, Integer>[1];
map.entrySet().toArray(t); 
   **Cannot create a generic array of Map.Entry<Character,Integer>**

Entry<Character, Integer>[] t = null;
t = map.entrySet().toArray(t); 
**Exception in thread "main" java.lang.NullPointerException**

那么如何将HashMap转换为Array其他科目中找不到任何答案。

2 个答案:

答案 0 :(得分:11)

我认为这会奏效:

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

...但您需要一个@SuppressWarning注释来抑制有关不安全类型转换的警告。

答案 1 :(得分:1)

我不确定你的尝试方式。我会做的是

当您这样做时,您将获得一个EntrySet,因此数据将存储为条目

因此,如果您想将其保留在EntrySet中,您可以这样做:

List<Entry<Character, Integer>> list = new ArrayList<Entry<Character, Integer>>();

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

另请注意,在执行此操作时,您将始终获得不同的顺序,因为未订购HashMap。

或者您可以创建一个类来保存Entry数据:

public class Data {
    public Character character;
    public Integer value;

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

使用以下方法提取它:

List<Data> list = new ArrayList<Data>();

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