Kotlin 列表的结构和非结构之间的差异

Kotlin 列表的结构和非结构之间的差异,kotlin,Kotlin,如Kotlin文档中所述,特别是List::subList方法: 返回的列表由该列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然 基础列表中的结构更改使视图的行为未定义 我找不到对上述结构性和非结构性变化的任何进一步解释或确切定义。直觉是这样的: 非结构性 更改列表的元素,而不是列表本身。例如,将列表第一个元素的值从1更改为2。另一个例子是将列表强制转换为其他类型 结构: 更改列表结构:删除或添加元素,更改元素顺序 我的问题主要是:我的假设正确吗?我们可以在这些“定义”中添加

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

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

基础列表中的结构更改使视图的行为未定义

我找不到对上述结构性和非结构性变化的任何进一步解释或确切定义。直觉是这样的:


非结构性

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

结构:

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


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

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


提前感谢您的讨论和您的见解

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

  • 结构与非结构:

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

    “另一个例子是将列表强制转换为其他类型。”强制转换列表根本不会改变它

  • 对于返回的子列表中的结构更改,它们是否使基本列表视图未定义

    否:

    如果支持列表(即,此列表)在结构上被修改,而不是通过返回的列表进行修改,则此方法返回的列表的语义将变得未定义

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

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