我很惊讶。为什么限制实现类型为Range,其大小是否受Int.MaxValue限制? 感谢。
答案 0 :(得分:5)
NumericRange
是Range
类的更通用版本 任意类型。它必须提供Integral
范围类型的实现。可能类型的工厂包括
Range.BigInt
,Range.Long
和Range.BigDecimal
。Range.Int
存在完整性,但基于Int
scala.Range
应该更高效。val r1 = new Range(0, 100, 1) val veryBig = Int.MaxValue.toLong + 1 val r2 = Range.Long(veryBig, veryBig + 100, 1) assert(r1 sameElements r2.map(_ - veryBig))
答案 1 :(得分:0)
在我看来,另一个答案是错误的。
它演示了您可以使用其他数字类型,但这不会改变Range
只能保存2³¹
元素的事实,就像Scala / Java中的每个其他集合一样。
据我所知,这个设计决定背后没有真正的理由。拥有64位集合肯定会很好,对于具有64位索引的数组的支持在Java中很常见,但很难将它集成到现有的语言/集合框架中。有人说JVM仅限于40亿个对象,但我无法验证。