Scalaのコレクション系列多くてどれを使っていいのか悩む
PHPだとarray()で済んでたからな…。
とりあえず配列は、線形処理ならList、ランダムアクセスならVectorで、
辞書ならMapを使っておけばいいのでしょうか。。。
scala.collections.immutable
Traversable └Iterable ├Set │├HashSet │├SortedSet ││└TreeSet │├BitSet │└ListSet ├Map │├HashMap │├SortedMap ││└TreeMap │└ListMap └Seq ├IndexedSeq │├Vector │├NumericRange │└Range └LinearSeq ├List ├Stream ├Queue └Stack
scala.collections.mutable
Traversable └Iterable ├Set │├HashSet │├BitSet │├OvservableSet │├SynchronizedSet │├ImmutableSetAdaptor │└LinkedHashSet ├Map │├HashMap │├WeakHashMap │├OpenHashMap │├LinkedHashMap │├ObservableMap │├SynchronizedMap │├ImmutableMapAdaptor │├ListMap │└MultiMap └Seq ├IndexedSeq │├ArraySeq │├StringBuilder │└ArrayBuffer ├Buffer │├OvservableBuffer │├SynchronizedBuffer │└ListBuffer ├Stack │└SynchronizedStack ├ArrayStack ├PriorityQueue │└SynchronizedPriorityQueue └LinearSeq ├MutableList │└Queue │ └SynchronizedQueue ├LinkedList └DoubleLinkedList
Scalaの変位指定アノテーションと上限・下限境界がわからない
LL脳には辛い。
説明を読んでるときには、「なるほどなー」、と思うんだけど、いざ出てくると「どういう意味だっけ…」ってなるし、「いつ使えばいいんだ…」ってなってる。
classだけではなくて、defにも使えるので、混乱する。。。
とりあえずこれは理解した。
class Aaa class Bbb extends Aaa class Ccc extends Bbb class D[T >: Bbb] val dAaa = new D[Aaa] // dAaa: D[Aaa] = D@4b2bac3f val dBbb = new D[Bbb] // dBbb: D[Bbb] = D@4988d8b8 val dCcc = new D[Ccc] // error: type arguments [Ccc] do not conform to class D's type parameter bounds [T >: Bbb] class E[T <: Bbb] val eAaa = new E[Aaa] // error: type arguments [Aaa] do not conform to class E's type parameter bounds [T <: Bbb] val eBbb = new E[Bbb] // eBbb: E[Bbb] = E@2cd2a21f val eCcc = new E[Ccc] // eCcc: E[Ccc] = E@3514a4c0
上限境界と下限境界は、定義したクラスとかメソッドとかに渡す時にチェックするってことかな。