【问题标题】:Java Hashmap values to ArrayJava Hashmap 值到数组
【发布时间】:2010-08-11 05:12:50
【问题描述】:

我有以下代码将一些数组添加到哈希图中,但是我想访问这些数组以便稍后对它们进行一些工作。我已经做到了这一点,但无法弄清楚其余部分以使其正常工作....

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;

    public static void main(String[] args) {

        String[][] layer1 = {
            {"to1", "TYPE1", "start"}, 
            {"to2", "TYPE1", "start"}
        };

        String[][] layer2 = {
            {"to3", "TYPE2" ,"item1"},
            {"to3", "TYPE2" ,"item2"}
        };

        HashMap<String,Object> hashMap = new HashMap<String,Object>();
        hashMap.put("layer1", layer1);
        hashMap.put("layer2", layer2);

        Iterator<Entry<String, Object>> iterator = hashMap.entrySet().iterator();
        while(iterator.hasNext()){
            hashMap.values().toArray();
            for (???) {
                // lets print array here for example
            }
        }        

    }

【问题讨论】:

    标签: java arrays hashmap


    【解决方案1】:

    闻起来像作业,但有一些建议 -

    • 您的 Hashmap 没有理由采用 &lt;String,Object&gt; 的形式 - 改为 &lt;String, String[][]&gt; ,因为这就是您要存储的内容。

    您正在迭代两次。你要么 - 遍历映射,键、值或条目。每个项目都是一个迭代器返回值,例如

    for (String[][] s:map.values()){
     ...
    }
    
    • hashmap.values.toArray 为您提供所有内容,这与您的迭代器正在执行的操作相同。

    • 如果您只是迭代内容,那么您并没有真正使用地图,因为您从未利用过您的值可以通过键获得的事实。

      李>

    【讨论】:

    • 不是作业...只是混合了太多语言来学习 atm :) 谢谢!
    【解决方案2】:

    ...只是混合了太多语言来学习 atm

    我能否建议您停止并花时间正确学习 Java。您的代码看起来像是在尝试编写“perlish”...关联数组和数组而不是正确的类型。与使用 Java 思维方式设计和编写的代码相比,最终结果是 Java 代码缓慢而脆弱。

    看起来你的工作效率很高,但你正在生产的东西在未来可能会出现问题。

    【讨论】:

      【解决方案3】:

      你的 while 循环应该看起来像 -

              while(iterator.hasNext()){
                  String[][] arr = (String[][])iterator.next().getValue();
      
                  for (String[] strings : arr) {
                      for (String string : strings) {
                          System.out.println(string);
                      }
                  }
              }
      

      【讨论】:

        【解决方案4】:

        您的代码在这里格式错误:

        while(iterator.hasNext()){
            hashMap.values().toArray();
            for (???) {
                // lets print array here for example
            }
        }      
        

        您尝试使用迭代器“迭代器”进行迭代,但接下来您调用

        hashMap.values().toArray();
        

        要获取循环的下一项,您需要使用 iterator.next();去拿它。也可以通过 String[][] 或 List&lt;String[]&gt; or List&lt;List&lt;String&gt;&gt; 更改“对象”。

        import java.util.HashMap;
        import java.util.Map;
        import java.util.Iterator;
        import java.util.Map.Entry;
        
        public static void main(String[] args) {
        
            String[][] layer1 = {
                {"to1", "TYPE1", "start"}, 
                {"to2", "TYPE1", "start"}
            };
        
            Map<String,String[][]> map= new HashMap<String,String[][]>();
            map.put("layer1", layer1);
        
            Iterator<Entry<String, String[][]>> iterator = map.entrySet().iterator();
            while(iterator.hasNext()){
                Entry<String, String[][]> entry = iterator.next();
                System.out.println("Key:" + entry.getKey());
        
                String[][] value = entry.getValue();
                for(int x=0;x<value.length;x++){
                 for(int y=0;y<value[x].length;y++){
                  System.out.println("String[" + x + "][" + y + "]:" + value[x][y]);        
                 }
                }
            }        
        }
        

        您还可以使用“for each”循环来简化使用“while”插入的代码:

        for (Entry<String, String[][]> entry : map.entrySet()){
            System.out.println("Key:" + entry.getKey());
            String[][] value = entry.getValue();
            for(int x=0;x<value.length;x++){
                for(int y=0;y<value[x].length;y++){
                    System.out.println("String[" + x + "][" + y + "]:" + value[x][y]);      
                }
            }
        }
        

        或者,如果您只需要这些值:

        for (Entry<String, String[][]> entry : map.values()){
            String[][] value = entry.getValue();
            for(int x=0;x<value.length;x++){
                for(int y=0;y<value[x].length;y++){
                    System.out.println("String[" + x + "][" + y + "]:" + value[x][y]);      
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2019-05-03
          • 1970-01-01
          • 2017-08-13
          • 1970-01-01
          • 2018-10-19
          • 1970-01-01
          • 2011-12-19
          • 2020-08-14
          • 1970-01-01
          相关资源
          最近更新 更多