entrySetイテレータを使用すべき場所で、keySetイテレータを使用しているため非効率なコード

HPをPHPからjavaへ書き換え中。

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

みたいなソースを書いていたら、

findbugsで
「entrySetイテレータを使用すべき場所で、keySetイテレータを使用しているため非効率なコードになって
います。」
と怒られた。

というわけで修正
for(Map.Entry entry: map.entrySet()){
System.out.println(entry.getKey()+ "/" + entry.getValue());
}
または、
for (Iterator> ite = map.entrySet().iterator(); ite.hasNext();) {
System.out.println(entry.getKey()+ "/" + entry.getValue());
}

なぜ駄目か調べたが、わかったような分からんような。
知らないことは恥ずかしいということは分かった。
仕事ではイテレータを使うことなかったから・・・←言い訳

追記
HttpServletRequest からすべてのパラメータを取得するために、

Map map = (HashMap) request.getParameterMap();
for(Map.Entry entry: map.entrySet()){
System.out.println(entry.getKey()+ "/" + entry.getValue());
}

みたいなことをしていると
情報: java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String
で落ちた。。。
Map[]> map = (HashMap[]>) req.getParameterMap();
for(Map.Entry entry: map.entrySet()){
System.out.println(entry.getKey()+ "/" + entry.getValue()[0]);
}
(めんどくさいのでentry.getValue()[0]と書いていますが、
配列のサイズを測ってStringを返却するメソッドをかましています。)

getParameterMapのAPIには
「戻り値:
パラメータ名が key 、パラメータ値がマップの値と なっている不変な java.util.Map。 パラメータマップの key は String 型。 パラメータマップの値は String の配列です。
とちゃんと書いてた。

備忘録つけることが、恥をさらすだけの気がしてきた。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 4

なるほど(納得、参考になった、ヘー)
驚いた
ナイス ナイス

この記事へのコメント

この記事へのトラックバック

  • レイバン ウェイファーラー

    Excerpt: entrySetイテレータを使用すべき場所で、keySetイテレータを使用しているため非効率なコード 備忘録/ウェブリブログ Weblog: レイバン ウェイファーラー racked: 2013-07-05 19:17
  • プラダ 店舗

    Excerpt: entrySetイテレータを使用すべき場所で、keySetイテレータを使用しているため非効率なコード 備忘録/ウェブリブログ Weblog: プラダ 店舗 racked: 2013-07-06 10:36
  • エアマックス 95

    Excerpt: entrySetイテレータを使用すべき場所で、keySetイテレータを使用しているため非効率なコード 備忘録/ウェブリブログ Weblog: エアマックス 95 racked: 2013-07-09 22:36
  • VISVIM 通販

    Excerpt: entrySetイテレータを使用すべき場所で、keySetイテレータを使用しているため非効率なコード 備忘録/ウェブリブログ Weblog: VISVIM 通販 racked: 2013-07-10 04:39