谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

コレクションの細かい話、だが面白い!

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導入のおかげで
ずいぶんとコードの見栄えが変わってくることになりそうです。