web-dev-qa-db-ja.com

Javaでマップを反復処理するにはどうすればよいですか?

私はBucketMapを反復処理し、すべてのkeysを取得する必要がありますが、たとえばbuckets[i].next.next.next.keyのようなものに到達するには、ここで試したように手動で行う必要はありません。

public String[] getAllKeys() {

    int j = 0;      //index of string array "allkeys"

    String allkeys[] = new String[8];

    for(int i = 0; i < buckets.length; i++) { //iterates through the bucketmap

        if(buckets[i] != null) {             //checks wether bucket has a key and value
            allkeys[j] = buckets[i].key;     //adds key to allkeys
            j++;                             // counts up the allkeys index after adding key

            if(buckets[i].next != null) {         //checks wether next has a key and value
                allkeys[j] = buckets[i].next.key; //adds key to allkeys
                j++;
            }
        }
    }

    return allkeys;
}

また、インデックスとして反復が行われた後に取得するjのバージョンを使用してString[] allkeysを初期化するにはどうすればよいですか?

18
NoIdea

基本的な使用方法としては、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;
}
44
azro

これが役立つかどうかを確認し、

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

Java 8では、Stream APIを使用することをお勧めします。

これにより、はるかに便利な方法でマップを反復処理できます。

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

Javaでのマップによる反復 に関するその他の例を確認してください。

0
Johnny