两种方法(一个数组随机取一定数量但不重复的元素组成新数组)

前言:以下两种方法都适用于不同类型的数组,包括 int 类型数组、String 类型数组以及对象数组等,以下以数值类型数组为例
需求:随机在一个数组中取一定数目(小于数组长度)的元素组成一个新数组,要求新数组里的元素不重复!
方法一:原数组长度每次会减1,对于不含有相同数字的 int类型数组,能达到随机不重复取值,但是对于含有相同数字的nt类型数组,就不能保证每次取值都是不重复的,具体代码和效果图如下:

public static void main(String[] args) { //定义的包含相同元素的 int类型数组 int[] oldArray = {1, 3, 9, 6, 7, 5, 8, 6, 6, 7, 6}; List newList = new ArrayList(); System.out.println(JSONArray.toJSONString(oldArray)); //当前新数组长度小于5就进入循环 while(newList.size() < 5) { //Math.random()返回的类型是Number,可返回介于 0(包含) ~ 1(不包含) 之间的一个随机数 //此处拿到整型,需进行转义 int i=(int)(Math.random()*oldArray.length); System.out.println("随机数:"+i+"数组值:"+oldArray[i]); newList.add(oldArray[i]); oldArray[i] = oldArray[oldArray.length-1]; //此步每次原数组长度会减少1,为的是达到去重效果 oldArray = Arrays.copyOf(oldArray, oldArray.length-1); } System.out.println("新数组"+JSONArray.toJSONString(newList)); System.out.println("旧数组"+JSONArray.toJSONString(oldArray)); }

两种方法(一个数组随机取一定数量但不重复的元素组成新数组)
文章图片

两种方法(一个数组随机取一定数量但不重复的元素组成新数组)
文章图片

法一总结:对于包含相同元素的数值类型数组,不能每次达到随机不重复的组合要求,但对于不包含相同元素的数值类型数组,是可以达到的,读者可以亲自尝试下!
【两种方法(一个数组随机取一定数量但不重复的元素组成新数组)】方法二:采用hashSet.add()方法,即使对于包含相同元素的数值类型数组,存放也只是不重复的元素,该方法声明只有当元素尚未存在于集合中时才会添加元素。如果成功添加了元素,则该方法返回true,否则返回false,具体代码和效果图如下:
public static void main(String[] args) { //定义的包含相同元素的 int类型数组 int[] intArray = {1, 3, 9, 6, 7, 5, 8, 6, 6, 7, 6}; //转化json格式便于控制台打印 System.out.println(JSONArray.toJSONString(intArray)); //定义HashSet SethashSet = new HashSet<>(); //当前hashSet的长度小于5即进入循环 while (hashSet.size() < 5) { //Math.random()返回的类型是Number,可返回介于 0(包含)~ 1(不包含)之间的一个随机数 //此处拿到整型,需进行转义 int index = (int) (Math.random() * intArray.length); //判断元素存不存在hashSet if(!hashSet.contains(intArray[index])) { //往hashSet里添加先前不存在的元素 //此处申明以下,不要外面的if判断语句也是可以达到目的的 hashSet.add(intArray[index]); } } System.out.println("新数组"+hashSet); System.out.println("旧数组"+JSONArray.toJSONString(intArray)); }

两种方法(一个数组随机取一定数量但不重复的元素组成新数组)
文章图片

法二总结:此方法不论给出数组是没有重复元素还是有重复元素的,得到都是随机不重复的集合,且原数组结构不会被破坏;转数值集合方式为List newList = new ArrayList(hashSet)
小提示:此随机去重算法和数组类型无关,可应用于不同类型数组(包括实体类对象数组哟),得到随机不重复数组!

    推荐阅读