列表的结构性和非结构性之间的区别

时间:2019-11-29 14:55:49

标签: kotlin

如Kotlin文档中所述,特别是List :: subList方法docs

  

此列表支持返回的列表,因此返回列表中的非结构性更改会反映在此列表中,反之亦然。

     基本列表中的

结构更改使视图的行为不确定。

我无法找到上述结构性和非结构性变化的进一步解释或确切定义。直觉如下:


非结构性

更改列表的元素,而不是列表本身。例如,将列表的第一个元素的值从1更改为2。另一个例子是将列表转换为其他类型。

结构:

更改列表结构:删除或添加元素,更改元素的顺序。


我的问题主要是:我的假设正确吗?我们可以在“定义”中添加一些内容吗?

返回的子列表中的结构更改如何?它们会使基本列表视图不确定吗?最后, undefined 是否意味着基本列表或子列表中的更改可能或可能不会反映在相应的视图中?

预先感谢您的讨论和您的见解!

1 个答案:

答案 0 :(得分:2)

这是与the Java version相同的方法,并且其文档回答了您的问题(从技术上讲Kotlin / JS和Kotlin / Native的行为可能有所不同,但这很令人惊讶):

  1. 结构与非结构:

      
        

    (结构修改是更改此列表的大小的结构修改,或者以其他方式干扰此列表的方式,使得正在进行的迭代可能会产生错误的结果。)

      

    “另一个示例将列表转换为其他类型。”投射列表完全不会改变。

  2.   

    返回的子列表中的结构更改如何?它们会使基本列表视图不确定吗?

    否:

      

    如果对后备列表(即此列表)进行了结构上的修改(而不是通过返回的列表),则此方法返回的列表的语义将变得不确定。

  3.   

    未定义是否意味着基本列表或子列表中的更改可能会或可能不会反映在相应的视图中?

    没有直接回答,但没有,没有。它可以例如在任何后续访问中引发异常。