scala collections API

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で呼び出せる特殊なメソッドのこと)が定義されてるんですね。
ただ、使ったとしても、コード量は短くなったとしても、読みづらい気がするんですが・・・実際どのくらい使われてるんですかね?