【问题标题】:How to iterate through a Map in java?如何在java中遍历Map?
【发布时间】:2017-08-18 07:30:08
【问题描述】:

我需要遍历BucketMap 并获取所有keys,但是我如何在不手动操作的情况下获得buckets[i].next.next.next.key 之类的东西,因为我在这里尝试过:

public String[] getAllKeys() {
    //index of string array "allkeys"
    int j = 0;
    String allkeys[] = new String[8];
    //iterates through the bucketmap
    for (int i = 0; i < buckets.length; i++) {
        //checks wether bucket has a key and value
        if (buckets[i] != null) {
            //adds key to allkeys
            allkeys[j] = buckets[i].key;
            // counts up the allkeys index after adding key
            j++;
            //checks wether next has a key and value
            if (buckets[i].next != null) {
                //adds key to allkeys
                allkeys[j] = buckets[i].next.key;
                j++;
            }
        }
    }
    return allkeys;
}

另外,如何使用迭代完成后获得的j 版本作为索引来初始化String[] allkeys

【问题讨论】:

  • 您还可以阅读 JavaDoc for Map 以了解获取所有键的更简单方法...
  • 你能给出bucket的定义吗?
  • 嗯,这是一张地图。它有一个键、一个值和下一个。
  • 所以你创建了一种 LinkedMap ?为什么不使用现有的实现?
  • 所以如果它是一个 Map,只需获取 keySet() 并通过 for(String key : bucketMap.ketSet()){ /* 条目类型例如 List、Map、Class 等进行迭代这里的地图值*/ ) = bucketMap.get(key) } 即 Map> 将是 List = buckeyMap.get(key);

标签: java loops hashmap iterator initialization


【解决方案1】:

对于 Java 8,我建议您使用 Stream API。

它将允许您以更方便的方式遍历地图:

public void iterateUsingStreamAPI(Map<String, Integer> map) {
    map.entrySet().stream()
      // ...
      .forEach(e -> System.out.println(e.getKey() + ":" + e.getValue()));
}

查看有关 iteration through maps in Java 的更多示例。

【讨论】:

    【解决方案2】:

    对于基本使用,HashMap 是最好的,我已经说明了如何迭代它,比使用迭代器更容易:

    public static void main (String[] args) {
        //a map with key type : String, value type : String
        Map<String,String> mp = new HashMap<String,String>();
        mp.put("John","Math");    mp.put("Jack","Math");    map.put("Jeff","History");
    
        //3 differents ways to iterate over the map
        for (String key : mp.keySet()){
            //iterate over keys
            System.out.println(key+" "+mp.get(key));
        }
    
        for (String value : mp.values()){
            //iterate over values
            System.out.println(value);
        }
    
        for (Entry<String,String> pair : mp.entrySet()){
            //iterate over the pairs
            System.out.println(pair.getKey()+" "+pair.getValue());
        }
    }
    

    快速解释:

    for (String name : mp.keySet()){
            //Do Something
    }
    

    意思是:“对于地图键中的所有字符串,我们将做一些事情,并且在每次迭代中我们将调用键'name'(它可以是任何你想要的,它是一个变量)


    我们开始吧:

    public String[] getAllKeys(){ 
        int i = 0;
        String allkeys[] = new String[buckets.length];
        KeyValue val = buckets[i];
    
        //Look at the first one          
        if(val != null) {             
            allkeys[i] = val.key; 
            i++;
        }
    
        //Iterate until there is no next
        while(val.next != null){
            allkeys[i] = val.next.key;
            val = val.next;
            i++;
        }
    
        return allkeys;
    }
    

    【讨论】:

      【解决方案3】:

      看看有没有帮助,

        HashMap< String, String> map = new HashMap<>();
        Set<String> keySet = map.keySet();
        Iterator<String> iterator = keySet.iterator();
        while(iterator.hasNext())
        {
          //iterate over keys
        }
      
      //or iterate over entryset 
      Iterator<Entry<String, String>> iterator2 = map.entrySet().iterator();
      
      while(iterator2.hasNext())
      {
          Entry<String, String> next = iterator2.next();
          //get key
          next.getKey();
          //get value
          next.getValue();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-03
        • 2014-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多