System.out.println("*****")之后的魔术; Collections.shuffle(一);
〜$ java -version java version"1.8.0_101"Java(TM)SE运行时环境(版本1.8.0_101-b13)Java HotSpot(TM)64位服务器VM(版本25.101-b13,混合模式)
public static void main(String[] args) {
List<Integer> a = Arrays.asList(1, 3, 5, 9, 14);
Collections.shuffle(a);
System.out.println(a);
List<Integer> b = a.subList(0, a.size() - 1);
List<Integer> b1 = new ArrayList<>(a.subList(0, a.size() - 1));
System.out.println(b);
System.out.println(b1);
System.out.println("*****");
Collections.shuffle(a);
System.out.println(a);
Collections.shuffle(b);
System.out.println(b);
Collections.shuffle(b1);
System.out.println(b1);
}
[14, 1, 9, 3, 5]
[14, 1, 9, 3]
[14, 1, 9, 3]
*****
[14, 9, 3, 5, 1]
[3, 14, 9, 5]
[1, 14, 9, 3]
Run Code Online (Sandbox Code Playgroud)
b shuffle(a)a.subList(0,a.size() - 1)之后的eq b; \
UPD
是的!一步步!1)创建2)创建b子列表a 3)shuffle(a)为什么shuffle(a)修改b?
UPD 2
为什么是正确的?当我洗牌时为什么这是真的我改变了顺序?
public static void main(String[] args) {
List<Integer> a = Arrays.asList(1, 3, 5, 9, 14);
Collections.shuffle(a);
System.out.println(a);
List<Integer> b = a.subList(0, a.size() - 1);
System.out.println(b);
System.out.println("*****");
Collections.shuffle(b);
System.out.println(a);
System.exit(0);
}
[1, 9, 3, 5, 14]
[1, 9, 3, 5]
*****
[3, 9, 5, 1, 14]
Run Code Online (Sandbox Code Playgroud)
b是一个视图上的前4个元素a.如果这些元素发生变化a,它们也会发生变化b.
所以你最初有:
a = {14, 1, 9, 3, 5}b = {14, 1, 9, 3};洗牌后a,你有:
a = {14, 9, 3, 5, 1}b = {14, 9, 3, 5}b1另一方面是一个独立的清单,a对创建后的更改b1没有影响b1.