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));

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这绝对是有史以来最详细的web前端学习路线

定要善用开发者工具。firefox的firebug和Chrome的F12都是很好的选择&#xff0c;用好了这个必会发现他带给你的帮助比看一本书更多。你把firebug摸透了你还担心对DOM理解不够&#xff1f;考虑到未来&#xff0c;html5和css3是必须学习的。看这篇总结的最全学习资料&#xff0c;…

cocos2d 走动椭圆

1.效果图艺术与规划说他想与我合作在全国率先主角光环加&#xff0c;椭圆形走动。cocos2d自带没有&#xff0c;參考网上的写了一个。2.椭圆数学知识有关椭圆的数学知识我已经忘光了。网上找了点资料&#xff1a;a是椭圆的长半轴&#xff0c;b是椭圆的短半轴。o是角度&#xff0…

java nashorn maven_使用mvn创建java工程的极简教程

最近开始集中精力搞java的开源项目&#xff0c;在这时记录一下使用mvn创建java工程的比较简单的流程&#xff0c;以备不时之需&#xff0c;适用于我等java小白~~~使用mvn创建java工程安装mvn创建java工程命令行执行mvn archetype:generate -DgroupIdcom.mytest -DartifactIdtes…

2014.7.22

技术&#xff1a; FUSE (FileSystem in UserSpace) http://zh.wikipedia.org/wiki/FUSE VFS(Virtual File System) http://baike.baidu.com/view/1149177.htm?fraladdin mogileFS,mooseFS,glusterFS,lustre,NFS http://blog.163.com/023_dns/blog/static/11872736620121017110…

深度学习中用来训练的train.py 探究学习2.0( 数据预处理)

数据预处理 下列代码为train.py中常见的一些数据处理方法 train_transform transforms.Compose([transforms.Resize((224, 224)),transforms.RandomVerticalFlip(),# 随机旋转&#xff0c;-45度到45度之间随机选transforms.RandomRotation(45),# 从中心开始裁剪transforms.C…

go语言入门(三)

条件语句 go语言的条件语句结构如下&#xff1a; go语言的条件语句和其他语言类似。简单列举下&#xff1a; 1、if 语句&#xff0c;布尔表达式不需要括号 if 布尔表达式 {   /* 在布尔表达式为 true 时执行 */   } 2、if...else语句 if 布尔表达式 { /* 在布尔表达式为 tr…

HDU 1950 Bridging signals

那么一大篇的题目描述还真是吓人。 仔细一读其实就是一个LIS&#xff0c;还无任何变形。 刚刚学会了个二分优化的DP&#xff0c;1A无压力。 1 //#define LOCAL2 #include <iostream>3 #include <cstdio>4 #include <cstring>5 using namespace std;6 7 const…

docker版本包 乌班图_Ubuntu安装Docker方式一:软件包安装

0.卸载旧版本Docker安装前需要先卸载老版本的Docker。sudo apt-get remove docker docker-engine docker.io containerd runc注意&#xff1a;这种方式每次升级都需要下载一个新的软件包。1.下载安装包去https://download.docker.com/linux/ubuntu/dists/选择你的Ubuntu版本&am…

1.8暂停线程

在java中&#xff0c;使用suspend()方法暂停线程&#xff0c;使用resume()方法恢复线程的执行。 1.8.1suspend与resume的使用&#xff1a; 线程代码&#xff1a; public class Thread1 extends Thread {private long i 0L;public long getI() {return i;}public void setI(lon…

map的用法

/* ACM中map的基本的用法&#xff0c;主要是用数组的形式实现。 1.构造map 2.数据插入 3.map的大小 4.数据的查找 5.数据的删除 */ #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<map> using namespace std…

iOS UI 18 数据库

// // RootViewController.m // Ui - 18 数据库 // // Created by dllo on 15/12/2. // Copyright (c) 2015年 dllo. All rights reserved. // #import "RootViewController.h" #import "DataBasehandle.h" #import "Student.h" interface …

ducker桌面版更改安装位置_Ubuntu 16.04 安装 Docker和默认存储路径修改

docker的安装并不复杂&#xff0c;网上有很多可参考的教程&#xff0c;这里记录下我的安装步骤和docker 镜像存储路径的配置方法&#xff0c;仅供参考。一、安装dockerStep1&#xff1a;检查安装环境是否满足docker安装要求检查kernel内核是否在3.10以上&#xff1a;~$ uname -…

JAVA解析纯真IP地址库

2019独角兽企业重金招聘Python工程师标准>>> 用java实现对纯真IP数据库的查询&#xff0c;首先到网上下载QQwry.da文件&#xff0c;读取代码如下&#xff1a;1.IP记录实体类 package com.guess.tools; /** * 一条IP范围记录&#xff0c;不仅包括国家和区域&#xff…

java jespa_Jespa实际运用的一点心得

最近在项目中遇到一个需求&#xff0c;此需求场景就是&#xff1a;当用户登录了windows&#xff0c;若用户用的AD域账号登录&#xff0c;则用IE浏览器打开应用系统时&#xff0c;则不必再输入账号和密码&#xff0c;自动登录到系统。简单滴说&#xff0c;就是应用系统与AD域进行…

webstorm 代码提示

1、vue语法提示 设置 – Inspections – HTML – Unknown HTML tags&#xff0c;添加customs v-text     v-html     v-once     v-if     v-show     v-else     v-for     v-on     v-bind     v-model     v-ref     v-el   …

Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725

Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725 1. DSL主要分为三类&#xff1a;外部DSL、内部DSL&#xff0c;以及语言工作台。 1 2. DSL规则 2 2.1. DSL 整洁的代码 2 2.2. DSL必须以文本代码的形式出现 2 2.3. DSL的语法应该尽可能地接近…

java tcp 监听端口_【TCP/IP】端口未监听,还能访问成功?

作者&#xff1a;Mr林_月生链接&#xff1a;https://www.jianshu.com/p/3ab10c8685b5现象直接上图可以发现&#xff0c;本地没监听50000端口的服务&#xff0c;但是尝试连接本地50000端口时&#xff0c;却能成功建立连接&#xff0c;这种现象叫做「自连接」。我们再通过netstat…

python随机生成定长字符串(转)

原文&#xff1a;http://www.oschina.net/code/snippet_153443_4752 运行结果&#xff1a; 转载于:https://www.cnblogs.com/Jollyxi/p/7992007.html

HDU 2204 Eddy's爱好(容斥原理)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2204 解题报告&#xff1a;输入一个n让你求出[1&#xff0c;n]范围内有多少个数可以表示成形如m^k的样子。 不详细说了&#xff0c;自己一开始也忽略了三个素数的乘积的乘方的情况。 1 #include<cstdio>2…

python 物理引擎 摩擦力_参赛作品2-phenom的2D物理引擎

全球图形学领域教育的领先者、自研引擎的倡导者、底层技术研究领域的技术公开者&#xff0c;东汉书院在致力于使得更多人群具备内核级竞争力的道路上&#xff0c;将带给小伙伴们更多的公开技术教学和视频&#xff0c;感谢一路以来有你的支持。我们正在用实际行动来帮助小伙伴们…