java 随机map_随机获取一个集合(List, Set)中的元素,随机获取一个Map中的key或value...

利用Java提供的Random类。从List或Set中随机取出一个元素,从Map中随机获取一个key或value。

因为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 getRandomElement(E[] array){

return array[getRandomInt(array.length)];

}

/**

* 从list中随机取得一个元素

* @param list

* @return

*/

public static E getRandomElement(List list){

return list.get(getRandomInt(list.size()));

}

/**

* 从set中随机取得一个元素

* @param set

* @return

*/

public static E getRandomElement(Set 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 getRandomKeyFromMap(Map 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 V getRandomValueFromMap(Map 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 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));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值