【问题标题】:About SortedSet interface, java tutorial关于SortedSet接口,java教程
【发布时间】:2013-04-03 14:05:14
【问题描述】:

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

这里有点兴趣:

范围视图操作有点类似于 List 界面,但有一个很大的区别。范围视图 即使修改了支持的排序集,排序集仍然有效 直接地。 这是可行的,因为范围视图的端点 排序集是元素空间中的绝对点,而不是 支持集合中的特定元素,列表也是如此。

有没有人能够用其他词来解释粗体部分?

提前致谢。

【问题讨论】:

    标签: java list sortedset


    【解决方案1】:

    假设您有一个列表和一个集合,它们都包含整数 11131517

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

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

    【讨论】:

      【解决方案2】:

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

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

      范围,有时称为区间,是特定域的凸(连续)部分。凸性意味着对于任何 a 3”包含任意大的值——或者可能是有限约束的,例如“2

      【讨论】:

      • 所以即使是 LinkedList 也不允许范围视图更改的可能性?
      • 问题不在于列表的类型,而在于它不是一个集合。 LinkedList 与 ArrayList 有相同的问题,索引相对于范围值是任意的。使用 Set,没有空值、没有重复项,并且代码可以指向定义范围边界的特定对象。支持结构很可能是一个链接列表,我不知道,但实现可以保证修改后的行为,而列表不能。我希望这是有道理的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多