コレクションの細かい話、だが面白い!
Collections Gathering
これぞJavaOne、これぞBoFという内容。
もう、すーーっごい細かいCollectionの話なんですが、だから面白かったんです。
Java7でCollections#sortが改善され、
TimSortとDual Pivot Quicksortが導入されてソートが2〜3から10倍早くなりました。
知ってたらドヤ顔できる系の情報ですね!
Java7でList/TreeMap/TreeSetのIteratorがかなり早くなって、
ArrayListのforeach文(拡張for文)も、普通のfor文より早くなりました。
これまでは
「統一感のために、ArrayListもforeach文を使おうぜ」派と
「ArrayListだけはfor文使った方がパフォーマンスいいから、for文使うぜ」派に
分派していましたが、これからは皆さん、foreach派になってもらえそうです。
「ArrayListだけはfor文使った方がパフォーマンスいいから、俺はfor文使うぜ!」
「はぁ? お前Java7からforeach文の方がパフォーマンス良くなったの知らないの? 知識、中途半端じゃね?」
とかって言う機会があるかと考えただけで、今からワクワクします!
# これが僕の聞き間違いで、誤情報だったらどうしよう・・・。
その他、Java7で増えたいくつかのキューイング系のクラス、
ThreadLocalRandomクラスの紹介や、
ConcurrentHashMapのオーバーヘッドが少なくなったことなどが紹介されました。
そして、Java8のCollectionも一瞬でしたが、紹介がありました!
1. 既存のCollection系のメソッドを、Lambdaベースで書けるようになる。
list.removeAll(s -> s.length() > 20);
2. ソート処理の並列化
list.parallelSort(cmparing(Person::getAge));
3. コレクションの並列処理
int max = list.parallel() .filter(x -> x.age >= 21) .map(x -> x.score) .reduce(0, Math::max);
これホントにJavaなんですか? っていう感じですが。
Java8以降は、並列化の強化、そのためのLambda導入のおかげで
ずいぶんとコードの見栄えが変わってくることになりそうです。