有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java集合。洗牌(a)魔术?

魔术过后
系统出来println(“****”); 收藏。洗牌(a)

~$java-版本 java版本“1.8.0_101” Java(TM)SE运行时环境(build 1.8.0_101-b13) Java HotSpot(TM)64位服务器虚拟机(构建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(a)不是a.子列表(0,a.size()-1)后的eq b; \

UPD

是的!一步一步地!1) 创建a 2)创建b子列表a 3)随机播放(a)为什么随机播放(a)修改b

UPD 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]

共 (2) 个答案

  1. # 1 楼答案

    ba view on the first 4 elements of ^{}。如果这些元素在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是一个独立的列表,创建b1后对a所做的更改对b1没有影响

  2. # 2 楼答案

    b after shuffle(a) not eq b after a.subList(0, a.size() - 1);

    这是因为在洗牌a之后,您也会洗牌b1b,因此bb1都不会显示您期望的结果。相反,您应该仅对进行洗牌a,以查看作为a子列表上的视图的b采用相同的顺序,而作为新列表的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]