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