Магия после
System.out.println("*****"); Коллекции.shuffle(a);
~$ java -version версия java "1.8.0_101" Java(TM) SE Runtime Environment (сборка 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) not eq b после a.subList(0, a.size() - 1); \
УПД
Ага! шаг за шагом! 1) создать a 2) создать b подсписок a 3) перемешать(a) Зачем перемешать(a) изменить b ?
УПД 2
Почему правильно? Почему это верно, когда я перетасовываю b я меняю порядок в a ?
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]
b
является подспискомa
, поэтому он поддерживается тем же экземпляром ArrayList. - person Eran   schedule 01.08.2016b
иb1
перед печатью, так что даже если они сохранят тот же порядокa
, то после перемешивания они будут печататься в другом порядке. - person tobias_k   schedule 01.08.2016