4

阅读Oracle 教程时,我发现了 List 的范围视图操作与 SortedSet 接口提供的操作之间的区别的解释。

这里有点感兴趣:

range-view 操作有点类似于 List 接口提供的操作,但有一个很大的不同。即使直接修改支持排序集,排序集的范围视图仍然有效。这是可行的,因为有序集合的范围视图的端点是元素空间中的绝对点,而不是支持集合中的特定元素,就像列表一样。

有没有人能够用换句话说来解释粗体部分?

提前致谢。

4

2 回答 2

5

假设您有一个列表和一个集合,它们都包含整数11、和。131517

你可以写set.subSet(12, 15)来构造一个视图,然后插入12到原始集合中。如果这样做,12将出现在视图中。

列表不可能做到这一点。即使您可以构造一个视图,当您在结构上修改原始列表(例如插入一个元素)时,该视图也会变得无效。

于 2013-04-03T14:14:34.353 回答
1

简短的回答是,有序集合直接由集合支持,这与您使用的列表不同,本质上是指针。对基础列表的更改会更改指针(索引),从而使长时间保持列表视图成为问题。由于集合已排序并且它是一个集合,因此您指向范围边界处的特定对象。这意味着如果在您持有视图时在范围内发生插入或删除,引用不会变为无效。

从技术上讲,在这种情况下范围的定义:

范围,有时称为区间,是特定域的凸(连续)部分。凸性意味着对于任何 a <= b <= c,range.contains(a) && range.contains(c) 意味着 range.contains(b)。范围可以扩展到无穷大;例如,范围“x > 3”包含任意大的值——或者可能是有限约束的,例如“2 <= x < 5”。

于 2013-04-03T14:21:23.990 回答