如何在 Java 中遍历 Map?

新手上路,请多包涵

我需要遍历 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;
}

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

原文由 NoIdea 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 481
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;
}

原文由 azro 发布,翻译遵循 CC BY-SA 4.0 许可协议

看看这是否有帮助,

   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();
}

原文由 DNAj 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题