Java 在列表中n个大小的垃圾箱内洗牌列表
我有一个java列表,例如:Java 在列表中n个大小的垃圾箱内洗牌列表,java,sorting,Java,Sorting,我有一个java列表,例如: a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22] 我想洗牌,但在n个大小的箱子内。从bin开始,我的意思是,我想洗牌前5个元素,然后洗牌下5个元素,以此类推。。 因此,预期结果之一将是: sorted = [3,5,4,2,1, 8,9,7,10,6, 14,11,12,15,13, 19,20,17,18,16, 22,21] 如何有效地执行此操作将数组放入列表并洗牌子列表: 整数[]
a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]
我想洗牌,但在n个大小的箱子内。从bin开始,我的意思是,我想洗牌前5个元素,然后洗牌下5个元素,以此类推。。
因此,预期结果之一将是:
sorted = [3,5,4,2,1, 8,9,7,10,6, 14,11,12,15,13, 19,20,17,18,16, 22,21]
如何有效地执行此操作将数组放入列表并洗牌子列表: 整数[]数组=新整数[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 }; List List=Arrays.ASLISTARRY; int-binSize=5; 对于int i=0,n=list.size;i
public static void shuffleBins(int binSize,
List<Integer> items) {
int start = 0;
for (int i = 0; i < items.size()/5; i++) {
Collections.shuffle(items.subList(start, start+binSize ));
start += binSize;
}
// finish up when items.size() % binSize != 0
Collections.shuffle(items.subList(start, items.size() ));
}
如果您想让它更通用,您可以提供一组指示箱子启动的索引
public static void shuffleBins(List<Integer> binStarts,
List<Integer> items) {
int start = 0;
for (int i = 0; i < binStarts.size(); i++) {
Collections
.shuffle(items.subList(start, binStarts.get(i)));
start = binStarts.get(i) + 1;
}
Collections.shuffle(items.subList(start, items.size()));
}
很好的解决方案。顺便说一句,不需要转换回数组。对于Object[]数组,arrays.asList方法只提供所提供数组的列表视图。所以一旦被洗牌,数组也会被洗牌。这也意味着您可以完成Collections.ShuffleArray.asListarray.subList。。。。这也会起作用。好的观点-我用了明显的而不是聪明的例子,但这是一个很好的优化。
[4, 5, 2, 3, 1, 10, 40, 20, 50, 30, 400, 200, 300, 100, 500, 2000, 1000]
public static void shuffleBins(int binSize,
List<Integer> items) {
int start = 0;
for (int i = 0; i < items.size()/5; i++) {
Collections.shuffle(items.subList(start, start+binSize ));
start += binSize;
}
// finish up when items.size() % binSize != 0
Collections.shuffle(items.subList(start, items.size() ));
}
public static void shuffleBins(List<Integer> binStarts,
List<Integer> items) {
int start = 0;
for (int i = 0; i < binStarts.size(); i++) {
Collections
.shuffle(items.subList(start, binStarts.get(i)));
start = binStarts.get(i) + 1;
}
Collections.shuffle(items.subList(start, items.size()));
}