diff options
author | Rui Gonçalves <ruippeixotog@gmail.com> | 2016-04-17 17:51:17 +0100 |
---|---|---|
committer | Rui Gonçalves <ruippeixotog@gmail.com> | 2016-05-17 10:55:16 +0100 |
commit | fe6886eb0ec9c02fa666e9e7af09bab92b985d05 (patch) | |
tree | aadd0a52ec583ff7fbd45ec95e611781adeee291 /test/files/run/t6198.scala | |
parent | 4c4c5e61a3b24e44247380eaf0519ee46036431a (diff) | |
download | scala-fe6886eb0ec9c02fa666e9e7af09bab92b985d05.tar.gz scala-fe6886eb0ec9c02fa666e9e7af09bab92b985d05.tar.bz2 scala-fe6886eb0ec9c02fa666e9e7af09bab92b985d05.zip |
Improve performance and behavior of ListMap and ListSet
Makes the immutable `ListMap` and `ListSet` collections more alike one another, both in their semantics and in their performance.
In terms of semantics, makes the `ListSet` iterator return the elements in their insertion order, as `ListMap` already does. While, as mentioned in SI-8985, `ListMap` and `ListSet` doesn't seem to make any guarantees in terms of iteration order, I believe users expect `ListSet` and `ListMap` to behave in the same way, particularly when they are implemented in the exact same way.
In terms of performance, `ListSet` has a custom builder that avoids creation in O(N^2) time. However, this significantly reduces its performance in the creation of small sets, as its requires the instantiation and usage of an auxilliary HashSet. As `ListMap` and `ListSet` are only suitable for small sizes do to their performance characteristics, the builder is removed, the default `SetBuilder` being used instead.
Diffstat (limited to 'test/files/run/t6198.scala')
-rw-r--r-- | test/files/run/t6198.scala | 7 |
1 files changed, 0 insertions, 7 deletions
diff --git a/test/files/run/t6198.scala b/test/files/run/t6198.scala index 5aa8f1c1cf..65dbaf8160 100644 --- a/test/files/run/t6198.scala +++ b/test/files/run/t6198.scala @@ -1,13 +1,6 @@ import scala.collection.immutable._ object Test extends App { - // test that ListSet.tail does not use a builder - // we can't test for O(1) behavior, so the best we can do is to - // check that ls.tail always returns the same instance - val ls = ListSet.empty[Int] + 1 + 2 - - if(ls.tail ne ls.tail) - println("ListSet.tail should not use a builder!") // class that always causes hash collisions case class Collision(value:Int) { override def hashCode = 0 } |