首页 > 编程语言 >JAVA:Collections类的shuffle()方法

JAVA:Collections类的shuffle()方法

时间:2023-06-22 20:35:47浏览次数:43  
标签:JAVA Arrays List list Collections ia shuffle asList

Java.util.Collections类下有一个静态的shuffle()方法,如下:

1)static void shuffle(List<?> list) 使用默认随机源对列表进行置换,所有置换发生的可能性都是大致相等的。

2)static void shuffle(List<?> list, Random rand) 使用指定的随机源对指定列表进行置换,所有置换发生的可能性都是大致相等的,假定随机源是公平的。

通俗一点的说,就像洗牌一样,随机打乱原来的顺序。

注意:如果给定一个整型数组,用Arrays.asList()方法将其转化为一个集合类,有两种途径:

1)用List<Integer> list=ArrayList(Arrays.asList(ia)),用shuffle()打乱不会改变底层数组的顺序。

2)用List<Integer> list=Arrays.aslist(ia),然后用shuffle()打乱会改变底层数组的顺序。代码例子如下:

package ahu;
import java.util.*;
  
public class Modify {
    public static void main(String[] args){
        Random rand=new Random(47);
        Integer[] ia={0,1,2,3,4,5,6,7,8,9};
        List<Integer> list=new ArrayList<Integer>(Arrays.asList(ia));
        System.out.println("Before shufflig: "+list);
        Collections.shuffle(list,rand);
        System.out.println("After shuffling: "+list);
        System.out.println("array: "+Arrays.toString(ia));
        
        List<Integer> list1=Arrays.asList(ia);
        System.out.println("Before shuffling: "+list1);
        Collections.shuffle(list1,rand);
        System.out.println("After shuffling: "+list1);
        System.out.println("array: "+Arrays.toString(ia));
         
    }
}

运行结果如下:

Before shufflig: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

After shuffling: [3, 5, 2, 0, 7, 6, 1, 4, 9, 8]

array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Before shuffling: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

After shuffling: [8, 0, 5, 2, 6, 1, 4, 9, 3, 7]

array: [8, 0, 5, 2, 6, 1, 4, 9, 3, 7]

在第一种情况中,Arrays.asList()的输出被传递给了ArrayList()的构造器,这将创建一个引用ia的元素的ArrayList,因此打乱这些引用不会修改该数组。 但是,如果直接使用Arrays.asList(ia)的结果, 这种打乱就会修改ia的顺序。意识到Arrays.asList()产生的List对象会使用底层数组作为其物理实现是很重要的。 只要你执行的操作 会修改这个List,并且你不想原来的数组被修改,那么你就应该在另一个容器中创建一个副本。

标签:JAVA,Arrays,List,list,Collections,ia,shuffle,asList
From: https://www.cnblogs.com/javaxubo/p/17498268.html

相关文章

  • org.springframework.boot.builder.SpringApplicationBuilder.init([LjavalangObject;
    一SpringBoot2.0.4集成SpringCloud异常:org.springframework.boot.builder.SpringApplicationBuilder.([Ljava/lang/Object;)V二、异常处理参考:缘起初学springcloud的朋友可能不知道,其实SpringBoot与SpringCloud需要版本对应,否则可能会造成很多意料之外的错误,比如eureka注册了......
  • Java 基本数据类型 - 四类八种
    感谢:https://zhuanlan.zhihu.com/p/25439066八种基本数据类型分成四个大类1、整型byte、short、int、long2、浮点型float、double3、字符型char4、布尔型boolean数据类型详细介绍整型(byte、short、int、long)虽然byte、short、int、long数据类型都......
  • Java intern函数详解
    先看一个例子如果你会了那这篇文章你没必要看了,如果不会那请看下去,你一定会有收获:Strings=newString("hello");Stringstr1=s+"world";Stringstr3="helloworld";system.out.println(srt1==str3);Strings=newString("hello");Stringstr1=s+&q......
  • Java读取excel中日期格式结果为数字xxx天
    解释:Java读取excel中日期结果是计算1900-0-1之后到当前日期,一共有多少天,需要做一下转换处理/***用于计算1900-0-1之后的day天日期是哪天*举例:1900-0-1之后的44326天日期是2021/5/10*@return*/publicstaticStringdayToDate(intday){......
  • java.lang.ClassCastException java.util.Date cannot be cast to java.sql.Date
    报错信息:java.lang.ClassCastException:java.util.Datecannotbecasttojava.sql.Date原因是:不要这样进行转换。具体转换看这里https://www.cnblogs.com/javaxubo/p/17498174.html......
  • java中java.util.Date和java.sql.Date之间的转换
    1、util.Date和sql.Date之间的关系我们来看下java.sql.Date的源码packagejava.sql;importjava.time.Instant;importjava.time.LocalDate;publicclassDateextendsjava.util.Date{}从以上源码可以看出,sql.Date是util.Date的子类2、util.Date的构造方法以下是ja......
  • JavaScript类
    1JavaScript类每个JavaScript对象都是一个属性集合,相互之间没有任何联系在JavaScript中也可以定义对象的类让每个对象都共享某些属性,这种“共享”的特性是非常有用的类的成员或实例都包含一些属性,用以存放或定义它们的状态其中有些属性定义了它们的行为(通常称为方法)。这......
  • 56基于java的房屋租赁系统设计与实现
    本章节给大家带来一个基于java房屋租赁系统设计与实现,可适用于java租房网站java房子租用,房屋租用,租房网站,租房管理系统,房屋预约系统,预约看房,房屋资讯,在线房屋信息管理系统等。引言经过调查,目前现代人的生活节奏加快,生活压力也在逐渐的增加,网络的发展给人们带来的便利,随着网上......
  • java泛型
    泛型原理什么是泛型&为什么引入泛型publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();list.add(521);//添加Integer类型元素list.add("wan");//添加String类型元素list.add(true);//添加Boolean类型元素......
  • 20230418 java.util.Scanner
    简介publicfinalclassScannerimplementsIterator<String>,Closeable一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。Scanner使用分隔符模式将其输入分解为标记,默认情况下匹配空格。然后可以使用各种next方法将生成的标记转换为不同类型的值。Scanner......