public void testsort2() {
List<String> string =new ArrayList<String>();
string.add("woshibaoqiang");
string.add("woshizhenzhenzhen");
string.add("woshibaoqiangdebaba");
System.out.println("----------------排序前");
for(String string1:string) {
System.out.println(string);
}
System.out.println("-------------排序后");
Collections.shuffle(string);
for(String string1:string) {
System.out.println(string);
}
}
为什么输出System.out.println(string);时是
[woshizhenzhenzhen, woshibaoqiangdebaba, woshibaoqiang]
[woshizhenzhenzhen, woshibaoqiangdebaba, woshibaoqiang]
[woshizhenzhenzhen, woshibaoqiangdebaba, woshibaoqiang]
这个结果呢???
我想的string是一个list的集合,那为什么会遍历三次呢???
是它的长度为3吗??? 他怎么知道它的长度为3呢??
System.out.println(string1);要这样写,你输出的是string,string是list。要输出每个元素,你自己定义的是String string1
Collections.shuffle(string);你用个随机排序的,官方解释:
public static void shuffle(List<?> list)
使用默认的随机源随机排列指定的列表。 所有排列都以大致相等的可能性发生。
在前面的描述中使用了“大约”对冲,因为默认的随机源仅仅是独立选择的比特的无偏差源。 如果它是随机选择位的完美来源,则算法将选择具有完美均匀性的排列。
该实现从最后一个元素向后移动列表,重复地将随机选择的元素交换到“当前位置”中。 从从第一个元素运行到当前位置(包括)的列表的部分中随机选择元素。
该方法运行在线性时间。 如果指定的列表没有实现RandomAccess
接口并且很大,则此实现将混合之前将指定的列表转储到数组中,并将该混洗的数组转储回列表中。 这避免了将“顺序访问”列表进行混洗所产生的二次行为。