【scala初学】collections mutable.Set


次の話を続けてSet
WHAT IT IS
WHAT IT DOES
Additions:
xs += x
xsはxを増加し、xsを返します.
xs += (x, y, z)
xsカッコ内の要素を増やし、xsを返します.
xs++= ys
xsはys内のすべての要素を増加し、xsを返します.
xs add x
xをxsに増やし、重複しない場合はtrue、重複、falseを返します.
Removals:
xs -= x
xsからxを削除し、xsを返します.
xs -= (x, y, z)
xsからカッコ内の要素を削除してxsを返します
xs --= ys
xsからysのすべての要素を削除してxsを返します
xs remove x
xを削除します.xsにxが含まれていて正常に削除されている場合はtrueを返します.そうでない場合false
xs retain p
xsは断言pを満たす要素を保持する
xs.clear()
すべての要素を除去
Update:
xs(x) = b
(xs.update(x,b)と書くことができる).bはtrueであり、xをxsに増やし、そうでなければxsからxを削除する
Cloning:
xs.clone
新しいSetを返します.要素はxsと同じです.
可変Setと同様に、可変Setも+、+、-、--などの方法を提供しているが、より効果的なのは+=、
+=,-=可変と非可変Setでは、使い方はほぼ同じですが、実際の効果は:
可変:
scala> var s = Set(1, 2, 3)
s: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
scala> s += 4
scala> s -= 2
scala> s
res2: scala.collection.immutable.Set[Int] = Set(1, 3, 4)

次に可変のSetを見てみましょう
scala> val s = collection.mutable.Set(1, 2, 3)
s: scala.collection.mutable.Set[Int] = Set(1, 2, 3)
scala> s += 4
res3: s.type = Set(1, 4, 2, 3)
scala> s -= 2
res4: s.type = Set(1, 4, 3)

効果はほぼ同じで,いずれもSet(1,2,3)からSet(1,3,4)までであり,それでも彼らの内部行動は異なる.可変のSet s+=4は、Setの物理アドレスで変更されました.s-=2もそうです.(書生:ここでよく観察してみましょう.可変のSetを定義するのはvar sで、毎回sが新しいSetを指し直しています.可変のSetはvalで定義されていて、物理アドレスはずっと変わっていません.本当に変化しているのはSetの内部要素です)
少し、addの特徴を話して、上の表を比較します
可変Setのデフォルト実装では、ハッシュテーブルがSetを格納する要素が使用される.可変Setのデフォルトでは、エージェントが要素に一致する数値が実装されます.(書生:以下immutable setを指す)空のSetは単一のオブジェクトであり、長さが4に達するとsetが個別のオブジェクトとして、彼のすべての要素が彼のフィールドとして使用されます.4を超えると、setはhash triesとして実現する.
以上より、小サイズのSets(4以内)に対して、可変のsetがより簡潔で効率的になる.setの長さをできるだけ小さくしたい場合はimmutableを選択します.
Setには2つのサブインタフェースSortedSetとBitSetがある.