从有序对象拆分 Scala 树集
Split scala treeset from ordered object
我的用例非常简单,看起来像缓存,所以也许像 Guava 这样的东西很有用,但我使用 scala,如果不需要,我不想引入 Guava。
case class AAA(index:Double) extends Ordered[AAA] {
override def compare(that: AAA): Int = index.compare(that.index)
}
var aaaSet = mutable.TreeSet[AAA]()
AAA 大多以递增顺序出现在集合中,但索引值可能低于现有值。我需要的是一个简单的函数,它可以删除低于某个索引 (Double) 的元素。这并不 - 需要 - 是准确的,只要索引之上的任何内容都没有被删除。我可以用 O(log(n)) 复杂度来做到这一点,但是因为我总是可以从集合(或头部)的底部开始,所以我认为它可以做得更有效率。显然,我很快就得到了缓存库,但这些索引不是基于时间的,我的程序中需要多达数百万个这样的集合(因此希望比 O(log(n)) 更快)。
非常感谢对可能的解决方案的一些帮助和指导。即使这意味着 O(log(n)) 意味着最佳性能。
尽管这并不是我真正想要的解决方案,但我认为这将是一个不错的解决方案:
aaaSet = aaaSet.dropWhile(aa => aa.index < 1.3)
我的用例非常简单,看起来像缓存,所以也许像 Guava 这样的东西很有用,但我使用 scala,如果不需要,我不想引入 Guava。
case class AAA(index:Double) extends Ordered[AAA] {
override def compare(that: AAA): Int = index.compare(that.index)
}
var aaaSet = mutable.TreeSet[AAA]()
AAA 大多以递增顺序出现在集合中,但索引值可能低于现有值。我需要的是一个简单的函数,它可以删除低于某个索引 (Double) 的元素。这并不 - 需要 - 是准确的,只要索引之上的任何内容都没有被删除。我可以用 O(log(n)) 复杂度来做到这一点,但是因为我总是可以从集合(或头部)的底部开始,所以我认为它可以做得更有效率。显然,我很快就得到了缓存库,但这些索引不是基于时间的,我的程序中需要多达数百万个这样的集合(因此希望比 O(log(n)) 更快)。
非常感谢对可能的解决方案的一些帮助和指导。即使这意味着 O(log(n)) 意味着最佳性能。
尽管这并不是我真正想要的解决方案,但我认为这将是一个不错的解决方案:
aaaSet = aaaSet.dropWhile(aa => aa.index < 1.3)