zoukankan      html  css  js  c++  java
  • 随机获取一个集合(List, Set,Map)中的元素<转>

    import java.util.HashSet;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;
    import java.util.Set;
    
    import com.google.common.collect.Maps;
    
    
    public class RandomUtils {
        private static Random random;
    
        //双重校验锁获取一个Random单例
        public static Random getRandom() {
            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 Math.abs(getRandom().nextInt())%max;
        }
    
        /**
         * 获得一个[0,max)之间的整数。
         * @param max
         * @return
         */
        public static long getRandomLong(long max) {
            return Math.abs(getRandom().nextInt())%max;
        }
    
        /**
         * 从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;
        }
    
        public static void main(String[] args) {
            Set<Integer> set = new HashSet<>();
            for (int i = 0; i < 12; i++) {
                set.add(i);
            }
    
            for (int i = 0; i < 10; i++) {
                System.out.println(getRandomElement(set));
            }
        }
    }

    转自 https://m.2cto.com/kf/201507/412937.html

  • 相关阅读:
    sql中关于存在就不做操作的代码块
    mysql插入多条数据时间复杂度比较
    oracle in VS or效率
    如何实现分布式数据库
    angularJS操作键值对象(类似java的hashmap)填坑小结
    angularJS 如何读写缓冲
    angularJs自定义服务(实现签名和加密)
    ajax请求技术
    springboot中使用mybatis显示执行sql
    mysql快速生成truncate脚本清空数据库表记录
  • 原文地址:https://www.cnblogs.com/winkey4986/p/7592094.html
Copyright © 2011-2022 走看看