用Java从HashMap创建一个数组

时间:2013-08-16 07:27:55

标签: java arrays hashmap

我想在Java中用Hashmap创建一个String数组?

我的 HashMap 就像这样

HashMap<String, String> param = new HashMap<String, String>();
                 param.put("A", "2");
                 param.put("B", "3");
                 param.put("C", "2");

我想像这样创建一个数组的字符串。

String[] list = {"A 1", "A 2","B 1","B 2","B 3","C 1","C 2"};

编辑:

  

输入和输出之间的关系。如果键A的值是2输出   如果键B的值为3,则应该包含A 1和A 2   包含B 1 B 2 B3等。

我所做的是

public class test {
    public static void main(String[] args) {
        HashMap<String, String> param = new HashMap<String, String>();
        param.put("A", "2");
        param.put("B", "3");
        param.put("C", "2");

        String[] list = new String[param.size()];
        int i = 0;
        int a= Integer.parseInt(param.get("A"));
        for (int j = 1;j<= a;j++) {
            list[i] = ("a" +j);
            System.out.println(list[i]);
            i++;

        }

    }

我是Java新手。请帮助我怎么做。谢谢

3 个答案:

答案 0 :(得分:2)

试试这个

    HashMap<String, String> param = new HashMap<String, String>();
    param.put("A", "2");
    param.put("B", "3");
    param.put("C", "2");

    String[] list = new String[7];// It is better to use List other than an array
    int i = 0;
    for (Map.Entry<String, String> entry : param.entrySet()) {
        int lim=Integer.parseInt(entry.getValue());
       for(int j=0;j<lim;j++){
          list[i]=entry.getKey()+" "+String.valueOf(j+1);
           i++;
       }
    }

如果你真的想在这里使用数组。您可以尝试以下方式

  HashMap<String, String> param = new HashMap<String, String>();
    param.put("A", "2");
    param.put("B", "3");
    param.put("C", "2");
    int sum=0;
    for (Map.Entry<String, String> entry : param.entrySet()) {
        sum+=Integer.parseInt(entry.getValue());
    }
    String[] list = new String[sum];
    int i = 0;
    for (Map.Entry<String, String> entry : param.entrySet()) {
        int lim=Integer.parseInt(entry.getValue());
       for(int j=0;j<lim;j++){
          list[i]=entry.getKey()+" "+String.valueOf(j+1);
           i++;
       }
    }

答案 1 :(得分:0)

好的,比如:

String[] list = new String[param.size()];
int i = 0;
for (Map.Entry<String, String> entry : param.entrySet()) {
    list[i] = entry.getKey() + " " + entry.getValue();
    ++i;
}
assert i == list.length;
Arrays.sort(list);

但我认为您需要Map<String, Set<Integer>>


为什么不:

SortedSet<String> param;

void putParam(String key, String addableValue) {
    param.add(key + " " + addableValue);
}

putParam("A". "1");
putParam("B", "1");
putParam("A". "2");
putParam("B", "1");

String[] list = param.toArray(new String[param.size()]);
// [ "A 1", "A 2", "B 1" ]

对于泛型类型,toArray需要String的数组对象。为该数组提供正确的大小,将该数组重用为返回值list

答案 2 :(得分:0)

基本算法应该是:

  

对于地图中的每个键(使用param.entrySet())
  迭代value次并推送   进入数组/列表。