java - 将多个“随机生成”的对象添加到 ArrayList 会导致多次添加相同的对象
问题描述
我有一个Ttp
从ArrayList<City>
文件加载的类。在我的构造函数中,Ttp
我随机打乱从文件中读取的列表并将其分配给对象。
public class Ttp {
private ArrayList<City> cities;
public Ttp() {
cities = Utils.shuffleArray(Loader.getCities());
}
}
这样我就得到了 10 个带有很好洗牌数组的对象:
public static void main(String args[]) {
Loader.readFile("easy_0.ttp");
for(int i=0; i<10; i++){
System.out.println(new Ttp());
}
}
但是在这种情况下,当我尝试创建时,ArrayList<Ttp>
我会得到一个充满相同对象的集合(Ttp
具有相同城市数组的实例)
public static void main(String args[]) {
Loader.readFile("easy_0.ttp");
ArrayList<Ttp> arrayList = new ArrayList<>();
for(int i=0; i<10; i++){
arrayList.add(new Ttp());
}
arrayList.forEach(System.out::println);
}
随机播放功能:
public static <T> ArrayList<T> shuffleArray(ArrayList<T> arrayList) {
if (arrayList != null && arrayList.size() > 0) {
int numberOfRolls = Random.getGenerator().nextInt((arrayList.size() - arrayList.size() / 3) + 1) + arrayList.size() / 3;
int indexA;
int indexB;
T objectA;
for (int i = 0; i < numberOfRolls; i++) {
indexA = Random.getGenerator().nextInt(arrayList.size());
indexB = Random.getGenerator().nextInt(arrayList.size());
objectA = arrayList.get(indexA);
arrayList.set(indexA, arrayList.get(indexB));
arrayList.set(indexB, objectA);
}
}
return arrayList;
}
要在随机播放函数中选择随机索引,我正在使用java.util.Random
:
public class Random {
private static final java.util.Random generator = new java.util.Random();
public static java.util.Random getGenerator() {
return generator;
}
}
解决方案
如果Loader.getCities()
每次都返回同一个列表,这意味着shuffleArray()
一遍又一遍地改组同一个列表,并且每个Ttp.cities
都引用同一个单一列表。
解决方法是在某处制作副本。它可能是 in getCities()
,它可能是 in shuffleArray()
,或者它可能是在Ttp
构造函数中:
cities = Utils.shuffleArray(new ArrayList<>(Loader.getCities()));
推荐阅读
- python - Python 静默失败
- php - Laravel 在查询中使用函数
- powershell - 如何从 .txt 文件中提取 MAC 地址并将地址单独放在另一个 .txt 中
- r - 将 input$plotBrush 和 textInput 绑定在一起
- vue.js - created() 生命周期钩子中的 vue 异步调用
- sql - SQL 根据查询结果发送电子邮件,仅当查询返回结果时
- apache - 使用 htaccess,仅在 url 包含查询字符串但允许站点资源(CSS、JS 等)工作时才允许访问站点?
- html - 尝试在 Angular 表的列中加载值列表
- performance - 如何在没有最小化名称的情况下记录性能火焰图?
- sql - Querying JSON (specific situation)