我有一个带有值元素的列表整数:0,7,2,1,6,5.
我知道我可以使用方法
Collections.shuffle(list);
Run Code Online (Sandbox Code Playgroud)
洗牌我的清单.但我不想改变第二名的价值.它应该总是7.
我怎样才能做到这一点 ?
您可以随机播放Collection,然后将7恢复到第2个位置:
Collections.shuffle(list);
list.set(list.indexOf(7),list.get(2));
list.set(2,7);
Run Code Online (Sandbox Code Playgroud)
或更短:
Collections.shuffle(list);
Collections.swap(list, 2, list.indexOf(7));
Run Code Online (Sandbox Code Playgroud)
正如其他人建议的那样,您也可以在重排之前删除要保留其位置的元素,然后将其添加到同一位置.
两种方式都应该花费相似的时间用于ArrayLists(在最坏的情况下是线性的),因为在我的回答中indexOf需要线性时间,但在替代解决方案中删除和添加元素(特别是如果索引接近列表的开头)将需要线性时间ArrayList,因为必须将删除/添加的索引之后的所有元素推送到新索引.
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |