• 随机获取一个集合(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

  • 相关阅读:
    apache和tomcat有什么不同,为什么要整合apache 和tomcat
    使用jstack分析cpu消耗过高的问题
    eclipse建立springMVC 简单项目
    JAVA中的反射机制
    MySQL索引的Index method中btree和hash的优缺点
    JAVA中的线程安全与非线程安全
    Java中普通代码块,构造代码块,静态代码块执行顺序
    jvm的内部体系结构浅析
    CPU思考
    linux内核调度算法(2)--CPU时间片如何分配 转!
  • 原文地址:https://www.cnblogs.com/winkey4986/p/7592094.html
Copyright © 2020-2023  润新知