在列表/数组列表中打乱对象的整数<整数,字符串>


List<Data> list = new ArrayList<Data>();
public class Data{
public int n;
public String p;
public Data(int N, String P) {
n = N;
p = P;
}
}

如何洗牌对象的整数:数据。因此,字符串保持在相同的位置,Integer get被打乱。

循环通过list,并将每个Data对象的int存储在单独的列表中。使用Collections.shuffle(...)打乱此列表。循环通过这个新的混洗列表,并将list的每个对应成员的n字段设置为在混洗列表中找到的新的随机int

可能必须自己做:

for (int i = list.size(); i > 0; i--) {
int j = (int)(Math.random() * (i + 1));
int temp = list.get(i).n;
list.get(i).n = list.get(j).n;
list.get(j).n = temp;
}

从java库中可以做的最好的事情是首先将其拆分为两个列表,一个是int,另一个是string,然后只对int进行混洗(使用Collections.shuffle),然后将这两个列表组合回一个Datas列表

您可以使用这样的东西:

List<Integer> ns = new ArrayList<Integer>(list.size());
for (Data data : list) {
ns.add(data.n);
}
Collections.shuffle(ns);
for (int i = 0; i < list.size(); i++) {
Data data = list.get(i);
int newN = ns.get(i);
data.n = newN;
}

请注意,最好使用访问器getN()setN(int),并将Data.n设为private

最新更新