diff options
author | Josh Suereth <Joshua.Suereth@gmail.com> | 2012-08-11 04:49:21 -0700 |
---|---|---|
committer | Josh Suereth <Joshua.Suereth@gmail.com> | 2012-08-11 04:49:21 -0700 |
commit | ffca128c5caeb1921bdbfb3736f649ffcdbb2af3 (patch) | |
tree | 35d4e5bdaa0f27b6e3de5e973c3b29e0fdead86e /src | |
parent | a9c00f2dff1f86f5cfcba4f8d88e784d866515ec (diff) | |
parent | cef47262326b2219c429a58f199cfb04ae109422 (diff) | |
download | scala-ffca128c5caeb1921bdbfb3736f649ffcdbb2af3.tar.gz scala-ffca128c5caeb1921bdbfb3736f649ffcdbb2af3.tar.bz2 scala-ffca128c5caeb1921bdbfb3736f649ffcdbb2af3.zip |
Merge pull request #1097 from rklaehn/SI-6198
Si 6198
Diffstat (limited to 'src')
-rw-r--r-- | src/library/scala/collection/immutable/HashSet.scala | 8 | ||||
-rw-r--r-- | src/library/scala/collection/immutable/ListSet.scala | 18 |
2 files changed, 14 insertions, 12 deletions
diff --git a/src/library/scala/collection/immutable/HashSet.scala b/src/library/scala/collection/immutable/HashSet.scala index c60fdc3bf1..7171e32ccc 100644 --- a/src/library/scala/collection/immutable/HashSet.scala +++ b/src/library/scala/collection/immutable/HashSet.scala @@ -151,10 +151,12 @@ object HashSet extends ImmutableSetFactory[HashSet] { override def removed0(key: A, hash: Int, level: Int): HashSet[A] = if (hash == this.hash) { val ks1 = ks - key - if (!ks1.isEmpty) - new HashSetCollision1(hash, ks1) - else + if(ks1.isEmpty) HashSet.empty[A] + else if(ks1.tail.isEmpty) + new HashSet1(ks1.head, hash) + else + new HashSetCollision1(hash, ks1) } else this override def iterator: Iterator[A] = ks.iterator diff --git a/src/library/scala/collection/immutable/ListSet.scala b/src/library/scala/collection/immutable/ListSet.scala index ce3abaacb7..4dd0d62fc0 100644 --- a/src/library/scala/collection/immutable/ListSet.scala +++ b/src/library/scala/collection/immutable/ListSet.scala @@ -116,8 +116,8 @@ class ListSet[A] extends AbstractSet[A] def hasNext = that.nonEmpty def next: A = if (hasNext) { - val res = that.elem - that = that.next + val res = that.head + that = that.tail res } else Iterator.empty.next @@ -126,18 +126,18 @@ class ListSet[A] extends AbstractSet[A] /** * @throws Predef.NoSuchElementException */ - protected def elem: A = throw new NoSuchElementException("Set has no elements"); + override def head: A = throw new NoSuchElementException("Set has no elements"); /** * @throws Predef.NoSuchElementException */ - protected def next: ListSet[A] = throw new NoSuchElementException("Next of an empty set"); + override def tail: ListSet[A] = throw new NoSuchElementException("Next of an empty set"); override def stringPrefix = "ListSet" /** Represents an entry in the `ListSet`. */ - protected class Node(override protected val elem: A) extends ListSet[A] with Serializable { + protected class Node(override val head: A) extends ListSet[A] with Serializable { override private[ListSet] def unchecked_outer = self /** Returns the number of elements in this set. @@ -162,7 +162,7 @@ class ListSet[A] extends AbstractSet[A] */ override def contains(e: A) = containsInternal(this, e) @tailrec private def containsInternal(n: ListSet[A], e: A): Boolean = - !n.isEmpty && (n.elem == e || containsInternal(n.unchecked_outer, e)) + !n.isEmpty && (n.head == e || containsInternal(n.unchecked_outer, e)) /** This method creates a new set with an additional element. */ @@ -170,10 +170,10 @@ class ListSet[A] extends AbstractSet[A] /** `-` can be used to remove a single element from a set. */ - override def -(e: A): ListSet[A] = if (e == elem) self else { - val tail = self - e; new tail.Node(elem) + override def -(e: A): ListSet[A] = if (e == head) self else { + val tail = self - e; new tail.Node(head) } - override protected def next: ListSet[A] = self + override def tail: ListSet[A] = self } } |