在Scala中实现自定义SortedMap
不知何故,我似乎无法正确实现SortedMap。下面是一个最小的(非)工作示例:在Scala中实现自定义SortedMap,scala,collections,Scala,Collections,不知何故,我似乎无法正确实现SortedMap。下面是一个最小的(非)工作示例: class MyMap[A](t: Map[Long, A]) extends SortedMap[Long, A] { protected val internalMap = TreeMap(t.toArray: _*) def -(key: Long) = MyMap(internalMap - key) def get(key: Long) = internalMap.get(key) d
class MyMap[A](t: Map[Long, A]) extends SortedMap[Long, A] {
protected val internalMap = TreeMap(t.toArray: _*)
def -(key: Long) = MyMap(internalMap - key)
def get(key: Long) = internalMap.get(key)
def rangeImpl(from: Option[Long], until: Option[Long]) = TreeMap(internalMap.rangeImpl(from, until))
def iterator = internalMap.iterator
def ordering = internalMap.ordering
}
但是,无论我传递到MyMap
构造函数中的是什么,例如调用它的size
,总是返回0
附录:我刚刚将代码复制粘贴到一个新项目中,它工作了8-\无论如何,让我改变这个问题以使其有用:这是扩展
SortedMap
的正确方法吗?在添加了两个缺少的方法使其编译后,您的代码对我来说运行良好:
class MyMap[A](t: Map[Long, A]) extends SortedMap[Long, A] {
protected val internalMap = TreeMap(t.toArray: _*)
def +[B1 >: A](kv: (Long, B1)) = new MyMap(internalMap + kv)
def -(key: Long) = new MyMap(internalMap - key)
def get(key: Long) = internalMap.get(key)
def rangeImpl(from: Option[Long], until: Option[Long]) = internalMap.rangeImpl(from, until)
def iterator = internalMap.iterator
def ordering = internalMap.ordering
}
从REP:
scala> t
res5: Map[Long,String] = Map(123 -> abc, 456 -> def)
scala> new MyMap(t)
res6: MyMap[String] = Map(123 -> abc, 456 -> def)
scala> res6.size
res7: Int = 2
我遗漏了什么吗?用一个问题来回答您的附录:既然
TreeMap
实现了SortedMap
,为什么您需要将它包装在MyMap
中?为什么不直接使用TreeMap
?(只是确认一下:我们谈论的是scala.collection.immutable.TreeMap
,对吗?@Chris:这是一个最小的工作示例:-)在现实生活中,我想为另一种SortedMap重新实现我自己的函数。是的,我们谈论的是scala.collection.immutable.SortedMap
。