【问题标题】:Why is the content of my original ArrayList sorted, if I sort only a copy of it in another ArrayList?如果我只对另一个 ArrayList 中的一个副本进行排序,为什么我的原始 ArrayList 的内容会被排序?
【发布时间】:2015-12-15 14:28:40
【问题描述】:

我不明白,为什么我的原始 ArrayList 的内容会被排序,如果我复制它然后(仅)排序这个副本。这是我使用的代码 sn-p:

Dim LatSorted As ArrayList = arLat LatSorted.Sort()

ArrayList arLat 包含纬度(双精度类型的未排序坐标)。如果我将整个内容复制到一个名为 LatSorted 的新 ArrayList 中,则原始数据不会按预期发生任何变化。但是只要我对新填充的 ArrayList LatSorted 进行排序,原来的 ArrayList 也会被排序。

我找到了解决方法:
如果我使用命令 Dim LatSorted As ArrayList = arLat.Clone 它按预期工作。

再次:为什么新 ArrayList 的 .Sort - 命令也会触及我原来的 ArrayList?

【问题讨论】:

  • 没有new ArrayList。 ArrayLists 是引用类型。您的第一行代码没有创建 ArrayList 的副本,它只是创建了对同一 ArrayList 的新引用。两个变量都指向同一个 ArrayList。但正如您所发现的,调用 Clone 创建了 ArrayList 的副本。但是请注意,如果 ArrayList 中有引用类型,则 Clone 方法实际上可能不会复制这些对象。您可能会得到参考的副本。

标签: vb.net sorting visual-studio-2012 arraylist


【解决方案1】:

新的 ArrayList 实际上只是对旧 ArrayList 的新引用。因此,如果您对新的排序,旧的也会排序。

“克隆”正是您创建一个真正新的 ArrayList 所需要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-13
    • 2018-07-13
    • 1970-01-01
    • 2020-01-03
    • 2015-10-28
    • 1970-01-01
    • 2012-09-10
    • 2019-07-26
    相关资源
    最近更新 更多