scalaの作者のMartin Odersky先生によるscala2.8 Collections APIの解説が公開されてますね
それなりに詳しく、なおかつコード例も結構出ていたりしてわかりやすい!
まぁもちろん英語ですが・・・でも、わかりやすい文章で書かれている(と思う)ので、たいして英語が得意ではないけど、半分以上はわかりました。ある程度、プログラミングとかscalaの知識があれば大丈夫だと思います。
たいぶたってからのの追記
日本語に訳してくれた方がいます。日本語版
もともと、ある程度は、2.8のコレクションもわかっているつもりでしたが、いろいろ新しい発見があったので、かきだしておきます
Traversable
Traversableはforeachだけがabstractなので、Traversableを継承して、foreachだけ定義すれば、なんとほかのmapやfilterもすべてつかえるようになります!
以前コード見ていて、なんとなく予想していたというか、やけにforeachばかり使ってほかのメソッド定義しているなとおもったら、こういうことだったんですね。
Vector
IndexedSeqとLinearSeqといって、両方Traversableとかを継承しているクラスがありますが、ちょっと性質が違うというか、それぞれ特徴があります。構造的に似ているものでたとえると、Javaでの、ArrayListとLinkedListとかでしょうか。それぞれ、(ちょっと御幣があるかもしれませんが)大雑把に言ってしまえば、
- ランダムにある要素にアクセスするのが得意だけれど、データの追加や削除は苦手。
- その逆で、追加や削除は得意だけれど、ランダムアクセスは苦手(ひとつずつ要素をたどらないといけないので時間がかかる)
の2種類で、前者がIndexedSeqで後者が、LinearSeqです。
その辺は一応知っていたんですが、2.8から導入されたVectorは、両者のハイブリッド(?)のような位置付けみたいですね。(木構造つかってるっぽい)
一覧表
また、それぞれのコレクションの、method別のパフォーマンスの一覧表があって、これがかなりわかりやすい!
オーダーの概念で、定数時間なのか、log(n)なのか、比例(n)なのかといった具合に、書かれているようです。
Setのupdateメソッド
あと細かい発見というか、ちょっと意外だったのは、Setもupdate(配列の要素に代入するようなsyntaxで呼び出せる特殊なメソッドのこと)が定義されてるんですね。
ただ、使ったとしても、コード量は短くなったとしても、読みづらい気がするんですが・・・実際どのくらい使われてるんですかね?