[英]How do I retrieve a key of ArrayList<String> from a Hashtable?
[英]Retrieve random key from Hashtable
好吧,我认为一切都在标题中...
但更明确地说:我有一个哈希表,其中的键是字符串(更确切地说是用户名),值是个人类,比方说UserData。 所以很明显,我使用此表来检索一些知道用户名的UserData; 但是有时候我想取一个随机的用户名。
这就是为什么我需要找到一种在哈希表中选择随机密钥的方法。
我已经尝试过了:
Random random = new Random();
int randomIndex = random.nextInt(myHashtable.size())-1;
String[] names = null;
myHashtable.keySet().toArray(names);
String randomUser = names[randomIndex];
System.out.println(randomUser);
但这是行不通的(我因错误使用随机而报错,对不起,我现在没有详细信息)
问题一: nextInt(n)
返回0到n-1范围内的值。按当前方式添加-1
会导致-1到n-2范围内的值(这是错误的)
问题二: myHashtable.keySet().toArray(names);
返回一个填充有keys
的数组(它不会分配和填充该数组)。
int len = myHashtable.size();
int randomIndex = random.nextInt(len);
String[] names = myHashtable.keySet().toArray(new String[len]); // sizing the
// array is optional, but you have the length - and if you don't specify it
// then it will be re-computed.
您可以将Set
转换为List
并使用ThreadLocalRandom
在此处获取范围文档之间的随机值,这种方法避免了创建Random
实例
List<String> l = new ArrayList<>(myHashtable.keySet());
System.out.println(l.get(ThreadLocalRandom.current().nextInt(0, l.size())));
public int nextInt(int起源,int绑定)
返回指定原点(包含)和指定边界(不含)之间的伪随机整数值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.