あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

List の使い方(続き2)

リストの長さを得る。

scala> List(4, 5, 6, 7).length
res0: Int = 4

リストの末尾要素、リスト末尾以外の要素のリストを得るメソッド

scala> val foo = List(4, 5, 6, 7)
foo: List[Int] = List(4, 5, 6, 7)

scala> foo.last
res1: Int = 7

scala> foo.init
res2: List[Int] = List(4, 5, 6)
  • init と last が返す値の形式は head と tail に対して逆になっている。
  • init last head tail の各メソッドは空リストで使用すると例外が投げられる。
  • head と tail はどちらも一定時間で処理されるが init と last はリストの全要素をたどるためサイズに比例して時間がかかる。
  • リストは連結リスト(linked list)を持っている。
  • リストの先頭へ要素を追加/削除するアクセス時間は、リストのサイズに関係なく一定(高速)
  • リストの末尾へ要素を追加/削除するアクセス時間は、リストのサイズに比例(高速でない)
  • なので、リスト先頭へアクセスして操作できるようにするほうが処理効率が良い。

リストの要素の並び順を反転させる。

  • リストの末尾要素へのアクセスが多くなる場合は、リストを反転させて処理する方が効率がよい。
  • リストはイミュータブルなので反転した結果は新しく生成したリストになる。
scala> val rlist = foo.reverse
rlist: List[Int] = List(7, 6, 5, 4)