Skip to content

Commit 1be284c

Browse files
authored
Merge pull request scala#8204 from xuwei-k/issue-11598
optimize immutable.TreeSet#{max, min}
2 parents 1314b45 + 3471277 commit 1be284c

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

src/library/scala/collection/immutable/TreeSet.scala

+16
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,22 @@ final class TreeSet[A] private (tree: RB.Tree[A, Unit])(implicit val ordering: O
6868
override def tail = new TreeSet(RB.delete(tree, firstKey))
6969
override def init = new TreeSet(RB.delete(tree, lastKey))
7070

71+
override def min[A1 >: A](implicit ord: Ordering[A1]): A = {
72+
if ((ord eq ordering) && nonEmpty) {
73+
head
74+
} else {
75+
super.min(ord)
76+
}
77+
}
78+
79+
override def max[A1 >: A](implicit ord: Ordering[A1]): A = {
80+
if ((ord eq ordering) && nonEmpty) {
81+
last
82+
} else {
83+
super.max(ord)
84+
}
85+
}
86+
7187
override def drop(n: Int) = {
7288
if (n <= 0) this
7389
else if (n >= size) empty

test/junit/scala/collection/immutable/TreeSetTest.scala

+28
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,32 @@ class TreeSetTest {
1717
assertEquals(set, set drop Int.MinValue)
1818
assertEquals(set, set dropRight Int.MinValue)
1919
}
20+
21+
@Test
22+
def min(): Unit = {
23+
assertEquals(1, TreeSet(1, 2, 3).min)
24+
assertEquals(3, TreeSet(1, 2, 3).min(implicitly[Ordering[Int]].reverse))
25+
26+
try {
27+
TreeSet.empty[Int].min
28+
fail("expect UnsupportedOperationException")
29+
} catch {
30+
case e: UnsupportedOperationException =>
31+
assertEquals("empty.min", e.getMessage)
32+
}
33+
}
34+
35+
@Test
36+
def max(): Unit = {
37+
assertEquals(3, TreeSet(1, 2, 3).max)
38+
assertEquals(1, TreeSet(1, 2, 3).max(implicitly[Ordering[Int]].reverse))
39+
40+
try {
41+
TreeSet.empty[Int].max
42+
fail("expect UnsupportedOperationException")
43+
} catch {
44+
case e: UnsupportedOperationException =>
45+
assertEquals("empty.max", e.getMessage)
46+
}
47+
}
2048
}

0 commit comments

Comments
 (0)