这是一个非常不可思议的惊喜:
scala> Set(1, 2, 3, 4, 5)
res18: scala.collection.immutable.Set[Int] = Set(4, 5, 1, 2, 3)
scala> Set(1, 2, 3, 4, 5).toList
res25: List[Int] = List(5, 1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)
这个例子本身就表明了我的问题的"不"答案.那怎么样ListSet?
scala> import scala.collection.immutable.ListSet
scala> ListSet(1, 2, 3, 4, 5)
res21: scala.collection.immutable.ListSet[Int] = Set(1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
这个似乎工作,但我应该依靠这种行为?还有哪些其他数据结构适用于必须保留原始订单的唯一项目的不可变集合?
顺便说一下,我确实知道distict方法List.问题是,我想在接口级强制执行项目的唯一性(同时保留顺序),因此使用distinct会弄乱我的整洁设计.
编辑
ListSet 看起来也不太可靠:
scala> ListSet(1, 2, 3, 4, 5).toList
res28: List[Int] = List(5, 4, 3, 2, 1)
Run Code Online (Sandbox Code Playgroud)
EDIT2
在我寻找完美设计时,我试过这个:
scala> class MyList[A](list: List[A]) …Run Code Online (Sandbox Code Playgroud) 我可以从Scala文档中看到scala.collection.immutable.Set只是一个特征.默认情况下使用Set实现中的哪一个?HashSet或TreeSet(或其他)?
我想知道/计划某些功能的运行时间.
例:
scala> val s = Set(1,3,6,2,7,1)
res0: scala.collection.immutable.Set[Int] = Set(1, 6, 2, 7, 3)
Run Code Online (Sandbox Code Playgroud)
什么是s.find(5),O(1)或O(log(n))的运行时间?
既然同样适用于Map,那么解决这个问题的最佳方法是什么?