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;
}
}
我怎样才能洗牌对象的整数:数据。所以 String 保持在相同的位置,并且 Integer 被打乱了。
循环遍历每个对象list
并将其存储在单独的列表中。使用 随机播放此列表。循环遍历这个新的混洗列表,并将每个相应成员的字段设置为在混洗列表中找到的新随机数。int
Data
Collections.shuffle(...)
n
list
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库中做的最好的事情是首先将它分成两个列表,一个整数和一个字符串,然后只打乱整数(使用Collections.shuffle),然后将两个列表组合回一个数据列表
你可以使用这样的东西:
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)
make Data.n
private
。