【问题标题】:Create a Array from HashMap in Java在 Java 中从 HashMap 创建一个数组
【发布时间】:2013-08-18 13:07:34
【问题描述】:

我想在 java 中从 Hashmap 创建一个字符串数组?

我的HashMap是这样的

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

我想像这样创建一个 Array 字符串。

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 新手。请帮助我如何做到这一点。谢谢

【问题讨论】:

  • 好的,到目前为止你尝试了什么??
  • for (String key : param.keys()) {...} 开始,看看它会把你带到哪里......
  • 您为什么要这样做?除非这是家庭作业,否则您很可能根本不需要创建这个数组。
  • @MadProgrammer for(Map.Entry&lt;String, String&gt; entry: param.entrySet()) 可能更有效。
  • 实际上我必须在 Android.of 中创建一个列表视图,因为我需要一个数组,并且我以 hashmap 的形式获取数据

标签: java arrays hashmap


【解决方案1】:

好的,比如:

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&lt;String, Set&lt;Integer&gt;&gt;


为什么不:

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

【讨论】:

  • 我希望输出为 String[] list = {"A 1", "A 2","B 1","B 2","B 3","C 1"," C 2"};
  • @Gaurav 告诉我输入输出有什么关系?
【解决方案2】:

基本算法应该是:

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

【讨论】:

    【解决方案3】:

    试试这个

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

    【讨论】:

    • 查看 A 的值是否为 2,那么在数组中它将像 A 1,A 2 依此类推..如果 A 为 3 那么 A 1,A 2,A 3 与每个相同我在 HashMAp 中拥有的密钥
    • @Gaurav 检查我的解决方案。你的问题没有解释这一点。现在我明白了。我会投票支持重新提出这个问题。最好使用List 而不是array
    • 实际上我必须返回我在问题中发布的数组。因为我必须在 android 的列表视图中填充它。请建议我该怎么做
    • 我需要一个字符串数组
    • @Gaurav 所以你有它,在这些步骤之后检查我的第二个解决方案String[] list= = {"A 1", "A 2","B 1","B 2","B 3","C 1","C 2"};。所以??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 2018-02-17
    • 2017-08-27
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多