从Hashtable中选择随机元素

时间:2016-07-07 14:39:40

标签: java

如何在java中生成随机字符,但生成的随机字符在哈希表中。 我想随机选择X,O或I,并将该值放在randomChar中。

char randomChar='O';

Hashtable ht = new Hashtable();
ht.put(1, 'X');
ht.put(10, 'O');
ht.put(12, 'I');
抱歉英语不好,

2 个答案:

答案 0 :(得分:1)

如果您没有使用HashTable执行此操作的特殊原因,那么我建议您只使用数组。要获得随机字符,您只需生成从0array.length - 1的随机数:

char[] chars = { 'X', 'O', 'I' };
char randomChar = chars[new Random().nextInt(chars.length)];

但是,如果您确实想使用HashTable,则应使用HashMap,而且不应使用原始类型:

Map<Integer, Character> hashMap = new HashMap<>();
hashMap.put(1, 'X');
hashMap.put(10, 'O');
hashMap.put(12, 'I');

获取随机Character的第一步是获取Character中的所有HashMap

Collection<Character> characters = hashMap.values();

Collection类不允许我们使用索引访问集合,因此我们需要从中构造List

List<Character> characterList = new ArrayList<>(characters);

现在要从此List获取一个随机字符,您可以生成一个随机数作为索引。为此,您可以使用Random类:

Random random = new Random();
int randomIndex = random.nextInt(hashMap.size());

最后,您使用此索引从Character获取随机List

Character randomChar = characterList.get(randomIndex);

要在一行中完成所有这些操作,您可以这样做:

Character randomChar = new ArrayList<>(hashMap.values()).get(new Random().nextInt(hashMap.size()));

答案 1 :(得分:0)

假设Hashtable使用keySet()提取密钥集,并将其作为带toArray的数组。然后取0 - size()-1范围内的随机数,从数组中选择相应的元素,并提取表中关联的值。

或者提取值并使用等效程序随机选择一个。