Help us understand the problem. What is going on with this article?

HashMapの総回し

More than 5 years have passed since last update.

PHPでの仕事が一段落したのでjavaのお勉強も並行して行なっていきます。
参考書はスッキリ分かるjava入門
実践編も買ってガンガン色んな問題等を解いていくのが学習効率いいのかな?
PHPのような便利関数が無い(?)ので、あれこれ苦労しながら勉強中。

とあるEラーニングサイトの問題にて、連想配列を使いたい問題が出てきたので
HashMapとやらを触ってみましたが、その中身を総当たりしようとすると、
色々やり方があるようなのでメモ。

例として、以下のHashMapを総当たりしてkeyとvalueを表示します。

example
HashMap<String, Integer> map = new HashMap<String, Integer>();

for

Set<String> keys = map.keySet();
for (int i = 0; i < keys.size(); i++) {
    String key = keys.toArray(new String[0])[i];
    System.out.println(key + " => " + map.get(key));
}

意味は分かるけれどあまりスマートでは無いような気がします。

拡張for(foreach)

for (String key : map.keySet()) {
    System.out.println(key + " => " + map.get(key));
}

かなりスマートになった気がしますし書きやすいですが、パッと見で意味分かるんかな…?
慣れてる人は読みやすいのかもしれません。

Iterator

for(Iterator<String> iterator = map.keySet().iterator(); iterator.hasNext(); ) {
    String key = iterator.next();
    System.out.println(key + " => " + map.get(key));
}

hasNext()は次の要素が存在するときtrueになることを利用したループ。
そもそもIteratorの意味がよく理解できていないんだけれど、
「配列などの各要素に対する繰り返し処理の抽象化」とwikiには書かれている、
それってつまりforeach(拡張for)で済む話なんじゃなかろうか。
うーん?

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

というデータがあったときに1~10までの数字を全てメモリに持つか、
1から10までの1つずつをメモリに順番に入れていって、それぞれ処理をするか、の違いなのかな?

追記

entrySet

for (Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " => " + entry.getValue());
}

Mapを回すときはkeySetよりも、entrySetの方が早いの記事を拝見して。

それぞれに利点があるんだろうな。まだ分からないけれど。

追記の追記

そして某Eラーニングサイトの問題は順番も指定されていたので、HashMapじゃダメのよう。
HashMapって順番不定なんだね。

追記の追記の追記

LinkedHashMapに変えるだけでいいんだ!なんて便利!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away