Mapでforをするときの改善ポイント

@iwasaki 20views 更新:2017年2月16日
    Map<String, String> headers = normalizedResp.getHeaders();
     if (headers != null) {
       for (String key : headers.keySet()) {
         servletResp.setHeader(key, headers.get(key));
       }
     }

みたいなコードを書くとFindbugsに以下のような警告が出ます。

com.aipo.social.core.oauth2.AipoOAuth2Servlet.sendOAuth2Response(HttpServletResponse, OAuth2NormalizedResponse) は、entrySet イテレータではなく効率が悪い keySet イテレータを使用しています。

このメソッドは、keySet イテレータから取り出されたキーを使用して、マップエントリの値にアクセスしています。 Map の entrySet イテレータを使用した方が Map.get(key) ルックアップを回避するのでより効率的です。

以下のように直します。

    Map<String, String> headers = normalizedResp.getHeaders();
    if (headers != null) {
      for (Entry<String, String> entry : headers.entrySet()) {
        servletResp.setHeader(entry.getKey(), entry.getValue());
      }
    }

参考

http://qiita.com/n_slender/items/22f78386cf0fe40e3663

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません