之后的魔术 的System.out.println(" *****&#34); Collections.shuffle(一);
〜$ java -version java版本" 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]
b shuffle(a)a.subList(0,a.size() - 1)之后的eq b; \
UPD
是的!一步步! 1)创建2)创建b子列表3)shuffle(a)为什么要随机播放(a)修改b?
UPD 2
为什么是正确的?当我改变b时,为什么会这样?我改变了一个?
中的顺序 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]
答案 0 :(得分:8)
b
是a view on the first 4 elements of 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
没有影响。
答案 1 :(得分:1)
b shuffle(a)a.subList(0,a.size() - 1)之后的eq b;
那是因为你在洗牌b1
之后也将b
和a
混为一谈,因此b
和b1
都不会显示你的内容预期。相反,您应该只对 a
进行随机播放,以查看b
作为a
子列表中的视图,在b1
时采用相同的顺序作为新列表,与a
的重新排序无关。
List<Integer> a = Arrays.asList(1, 3, 5, 9, 14);
List<Integer> b = a.subList(0, a.size() - 1);
List<Integer> b1 = new ArrayList<>(a.subList(0, a.size() - 1));
System.out.println(a);
System.out.println(b);
System.out.println(b1);
System.out.println("*****");
Collections.shuffle(a); // shuffle a, but do not shuffle b and b1!
System.out.println(a);
System.out.println(b);
System.out.println(b1);
输出:
[1, 3, 5, 9, 14]
[1, 3, 5, 9]
[1, 3, 5, 9]
*****
[5, 14, 1, 9, 3]
[5, 14, 1, 9]
[1, 3, 5, 9]