package com.example.demo.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom; /**
* @author niunafei
* @function
* @email niunafei0315@163.com
* @date 2018/12/23 下午1:17
*/
public class RandomUtils { /**
* 从list 中获取制定个数的子串
*
* @param tl
* @param n
* @param <T>
* @return
*/
public static <T> List randomSub(List<T> tl, int n) {
int count = tl.size()>n?n:tl.size();
Random r = ThreadLocalRandom.current();
//避免修改原列表
List<T> temp = new ArrayList<>(tl);
//记录返回列表
List<T> list = new ArrayList<>(count);
for (int i=0;i<count;i++) {
int t=r.nextInt(temp.size());
list.add(temp.get(t));
temp.remove(t);
}
return list;
} /**
* 数组中获取指定个数的子串
* @param t
* @param n
* @param <T>
* @return
*/
public static <T>T[] randomSub(T[] t,int n){
List<T> list=randomSub(Arrays.asList(t),n);
return list.toArray(Arrays.copyOf(t,list.size()));
} public static void main(String[] args){
List<Integer> list =new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,0,12,35,46,54,1,2,3,45,6,7,89,0));
System.out.println("原始:"+list);
System.out.println("随机10"+randomSub(list,10));
System.out.println("原始:"+list);
Integer[] array={1,2,3,4,5,6,7,8,9,0,12,35,46,54,1,2,3,45,6,7,89,0};
//使用Arrays.asList();将数组转为list
System.out.println("原始数组"+Arrays.asList(array));
System.out.println("数组随机10"+Arrays.asList(randomSub(array,10)));
System.out.println("原始数组"+Arrays.asList(array));
}
} https://www.aliyun.com/acts/product-section-2019/new-users?userCode=q3tq2yrp

java中list或数组中随机子集工具类的更多相关文章

  1. java程序练习:数组中随机10个数中的最大值

    //定义输入:其实是一个可以保存10个整数的数组 //使用循环遍历,生成10个随机数,放入每个元素中//打桩,数组中的内容 //定义输出变量 //将数组中第一个元素取出,保存在max中,当靶子 //遍 ...

  2. PHP中如何在数组中随机抽取n个数据的值 - array_rand()?

    PHP中如何在数组中随机抽取n个数据的值? 最佳答案 array_rand() 在你想从数组中取出一个或多个随机的单元时相当有用.它接受 input 作为输入数组和一个可选的参数 num_req,指明 ...

  3. Java比较两个数组中的元素是否相同的最简单方法

    import java.util.Arrays; public class Test { /** * Java比较两个数组中的元素是否相同 */ public static void main(Str ...

  4. Java基础语法(8)-数组中的常见排序算法

    title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...

  5. 4.产生10个1-100的随机数,并放到一个数组中 (1)把数组中大于等于10的数字放到一个list集合中,并打印到控制台。 (2)把数组中的数字放到当前文件夹的numArr.txt文件中

    package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayLis ...

  6. Java并发编程系列-(2) 线程的并发工具类

    2.线程的并发工具类 2.1 Fork-Join JDK 7中引入了fork-join框架,专门来解决计算密集型的任务.可以将一个大任务,拆分成若干个小任务,如下图所示: Fork-Join框架利用了 ...

  7. Java匹马行天下之JavaSE核心技术——工具类

    Java匹马行天之JavaSE核心技术——工具类 一.Object类 java.lang.ObjectObject类是所有类直接或间接的父类 常用的方法: toString():以字符串形式返回对象的 ...

  8. Java基础进阶:APi使用,Math,Arrarys,Objects工具类,自动拆装箱,字符串与基本数据类型互转,递归算法源码,冒泡排序源码实现,快排实现源码,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    要点摘要 Math: 类中么有构造方法,内部方法是静态的,可以直接类名.方式调用 常用: Math.abs(int a):返回参数绝对值 Math.ceil(double a):返回大于或等于参数的最 ...

  9. Java并发(十五):并发工具类——信号量Semaphore

    先做总结: 1.Semaphore是什么? Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源. 把它比作是控制流量的红绿灯,比如XX马路要 ...

随机推荐

  1. hdoj2796

    题意: 1.在每一堆里顶部的coin的size必须大于这一堆其他的coin: 2.在每一堆里顶部的coin的size必须大于前面堆的顶部的coin: 3.在每一堆里顶部的coin的num必须大于前面堆 ...

  2. bzoj 3262 陌上花开 【CDQ分治】

    三维偏序 首先把所有花按 x一序,y二序,z三序 排序,然后去重,con记录同样的花的个数,然后进行cdq 现在假设有[l.r]区间,其中[l,mid] [mid+1,r],已经递归处理完毕.我们把区 ...

  3. the little schemer 笔记(4)

    第四章 numbers games 14 是原子吗 是的,数都是原子 (atom? n) 是真还是假,其中n是14 真,14 是原子 -3是数吗 是的,不过我们暂不考虑负数 3.14159是数吗 是的 ...

  4. win32 寄存器

    跳转指令分三类: 一.无条件跳转: JMP ;无条件跳转 二.根据CX.ECX寄存器的值跳转: JCXZ ;CX 为 0 则跳转 JECXZ;ECX 为 0 则跳转 三.根据EFLAGS寄存器的PSW ...

  5. 清除select自带小三角

    select {/*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/border: solid 1px #000; /*很关键:将默认的select选择框样式清除*/appeara ...

  6. Appium安装说明

    1.安装Appium前,需要先安装node.js .node.js官方网站:https://nodejs.org/, 这里我以Windows 10为例进行安装,选择Windows installer( ...

  7. C语言-------指针函数与函数指针的区别

    一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某 ...

  8. Headmaster's Headache UVA - 10817

    UVA-10817 ans[i][s1][s2]表示考虑前i个人时,有至少1人教的科目集合为s1,有至少2人教的科目集合为s2时的最少工资集合用一个数字表示,转换成二进制后从后面开始数第i位的状态(1 ...

  9. android开发学习 ------- 枚举类型在Android中的用法

    一般上为了简化代码,重用代码,设置标志位来表示不同的流程,这个标志位可以使用枚举类型来表示: 1:定义 public FbManner fbManer = FbManner.EMAIL; //给一个默 ...

  10. asp.net 线程批量导入数据,ajax获取执行状态

    最近做了一个批量导入功能,长时间运行,没个反馈状态,很容易让人看了心急,产生各种臆想!为了解决心里障碍,写了这么个功能. 通过线程执行导入,并把正在执行的状态存入session,既共享执行状态,通过a ...