先週のおバカコード
なんかパフォーマンス試験したら、めちゃ遅。つうことで発掘。
java.util.List list = new java.util.ArrayList(); for (int i = 0; i < result.length; i++) { String id = result[i].get(hoge) + ":" + result[i].get(hage); if (list.contains(id)) { continue; } hasRights[i] = true; list.add(id); }
え〜っと、試験だとresult.lengthが10000になるので、最後のほうだと10000のものとの一致を見ることになるのですが、Listという入れ物の型にだまされて気づきませんでした。ArrayListは単なる配列ですから、contains()は順番に比較していく訳で。ここ全体で5秒以上かかっておりました。原因がわかったので改修。
java.util.Set seen = new java.util.HashSet(result.length * 2); for (int i = 0; i < result.length; i++) { String id = result[i].get(hoge) + ":" + result[i].get(hage); if (!seen.add(id)) { continue; } hasRights[i] = true; }