从ArrayList中随机选取元素

问题描述 投票:0回答:1

我需要从

List<MyObject> objects
中挑选 N 个随机元素。
MyObject
是一个复杂的类对象。我可以轻松地
Collections.shuffle(objects)
,并获得大小为 N 的子列表。

但后来我想到了一个想法。如果我创建一个

List<Integer> indexes
= [0, N-1],改洗这个索引数组,获取一个子列表,并使用它从原始列表中获取元素,它会提高性能吗?

我的问题归结为:在 Java 中重排与轻量级对象列表之间是否存在有意义的性能差异?


ps:如果重要的话,我需要在新列表中返回随机选择,同时将它们从原始列表中删除。

java arraylist shuffle
1个回答
0
投票

没有区别。

A

List
references(本质上是指针)的集合,而不是对象。列表中的每个元素都是一个引用,可以将其视为对象所在的内存中的地址。该引用隐式地将您带到该对象的内容。因此,我们很方便地认为该列表包含对象,尽管这并不完全准确。

因此,洗牌

List<MyObject>
和洗牌
List<Integer>
会做同样的工作。两者都会打乱对象引用的集合,而不是对象。这些对象从未移动过,它们始终位于相同的内存地址中。对
MyObject
对象的引用和对
Integer
对象的引用是相同的,都是引用。

打乱重物体与轻物体的列表

MyObject
类和
Integer
类的大小和复杂性与洗牌
List
无关。

© www.soinside.com 2019 - 2024. All rights reserved.