随机获取一个集合(List, Set)中的元素,随机获取一个Map中的key或value
2017-05-23 13:32
901 查看
利用Java提供的Random类。从List或Set中随机取出一个元素,从Map中随机获取一个key或value。
因为Set没有提供get(int index)方法,仅仅能先获取一个随机数后。利用一个计数器,对Set进行循环,当计数器等于随机数时返回当前元素,对于Map的处理也类似。
不知有没有更好的方法……
因为Set没有提供get(int index)方法,仅仅能先获取一个随机数后。利用一个计数器,对Set进行循环,当计数器等于随机数时返回当前元素,对于Map的处理也类似。
不知有没有更好的方法……
package com.xjj.util; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ThreadLocalRandom; /** * 随机数工具,单例模式 * @author XuJijun * */ public class RandomUtils { //private static Random random; //双重校验锁获取一个Random单例 public static ThreadLocalRandom getRandom() { return ThreadLocalRandom.current(); /*if(random==null){ synchronized (RandomUtils.class) { if(random==null){ random =new Random(); } } } return random;*/ } /** * 获得一个[0,max)之间的随机整数。 * @param max * @return */ public static int getRandomInt(int max) { return getRandom().nextInt(max); } /** * 获得一个[min, max]之间的随机整数 * @param min * @param max * @return */ public static int getRandomInt(int min, int max) { return getRandom().nextInt(max-min+1) + min; } /** * 获得一个[0,max)之间的长整数。 * @param max * @return */ public static long getRandomLong(long max) { return getRandom().nextLong(max); } /** * 从数组中随机获取一个元素 * @param array * @return */ public static <E> E getRandomElement(E[] array){ return array[getRandomInt(array.length)]; } /** * 从list中随机取得一个元素 * @param list * @return */ public static <E> E getRandomElement(List<E> list){ return list.get(getRandomInt(list.size())); } /** * 从set中随机取得一个元素 * @param set * @return */ public static <E> E getRandomElement(Set<E> set){ int rn = getRandomInt(set.size()); int i = 0; for (E e : set) { if(i==rn){ return e; } i++; } return null; } /** * 从map中随机取得一个key * @param map * @return */ public static <K, V> K getRandomKeyFromMap(Map<K, V> map) { int rn = getRandomInt(map.size()); int i = 0; for (K key : map.keySet()) { if(i==rn){ return key; } i++; } return null; } /** * 从map中随机取得一个value * @param map * @return */ public static <K, V> V getRandomValueFromMap(Map<K, V> map) { int rn = getRandomInt(map.size()); int i = 0; for (V value : map.values()) { if(i==rn){ return value; } i++; } return null; } /** * 生成一个n位的随机数,用于验证码等 * @param n * @return */ public static String getRandNumber(int n) { String rn = ""; if (n > 0 && n < 10) { //Random r = new Random(); StringBuffer str = new StringBuffer(); for (int i = 0; i < n; i++) { str.append('9'); } int num = Integer.parseInt(str.toString()); while (rn.length() < n) { rn = String.valueOf(ThreadLocalRandom.current().nextInt(num)); } } else { rn = "0"; } return rn; } public static void main(String[] args) { /*Set<String> set = new HashSet<>(); for (int i = 0; i < 12; i++) { set.add("I am: " + i); } for (int i = 0; i < 10; i++) { System.out.println(getRandomElement(set)); }*/ System.out.println(getRandom().nextInt(-100, 10)); } }
相关文章推荐
- 随机获取一个集合(List, Set)中的元素,随机获取一个Map中的key或value
- 随机获取一个集合(List, Set,Map)中的元素<转>
- java8 stream初试,map排序,list去重,统计重复元素个数,获取map的key集合和value集合
- Map.Entryset获取每个元素的Key,value
- s:iterator输出key为一个对象,value为一个List集合的Map
- BeanListHandler:(常用)将多条记录封装到一个装有JavaBean的List集合中;MapHandler: 将一条记录封装到一个Map集合中,Map的key是列名,Map的value就是
- JavaScript中获取Map集合中的key和value值(前提是:既不知道key为什么值,也不知道value有哪些值)
- python字典分别按照key和value升序或者降序排列--以给定一个含有重复元素的数组list,按照其出现次数大小降序输出
- 【Java】集合(List、Set、Map)遍历、删除、比较元素时的小陷阱
- 编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象,然后遍历并打印出各元素的key和value。
- hibernate通过sql查询返回一个key value对应的map对象型集合
- 获取list集合map集合中元素的方式
- Map四种获取key和value值的方法,以及对map中的元素排序
- EL表达式, JSTL, 获取map集合中key的value
- 集合--(List、Set、Map)遍历、删除、比较元素时的小陷阱
- jstl中取map,其中map的key是一个对象,value是一个list
- rust map的使用:获取某个key对应的value,如果不存在就插入一个
- 编程技巧系列(2)Java 集合(List,Set,Map)遍历时有条件删除特定元素
- 定义一个Map对象,遍历并打印出各元素的key和value
- 在JavaScript中获取Map集合中的key和value值(前提是:既不知道key为什么值,也不知道value有哪些值)