Java-hashtable是否返回任何值或任何键?

Java-hashtable是否返回任何值或任何键?,java,hashtable,Java,Hashtable,假设我有这样的哈希表: Hashtable<Object, Object> test = new Hashtable<>(); test.put("t", 1); test.put(2, "t123"); test.put(3, true); Hashtable test=newhashtable(); 测试。放置(“t”,1); 测试。放置(2,“t123”); 测试。输入(3,正确); 在不知道任何键或值的情况下,我如何从它返回任何值或从该哈希表获取任何键?我应

假设我有这样的哈希表:

Hashtable<Object, Object> test = new Hashtable<>();

test.put("t", 1);
test.put(2, "t123");
test.put(3, true);
Hashtable test=newhashtable();
测试。放置(“t”,1);
测试。放置(2,“t123”);
测试。输入(3,正确);

在不知道任何键或值的情况下,我如何从它返回任何值或从该哈希表获取任何键?我应该迭代它并获得第一个值,还是有更简单更好的方法?

您可以将所有条目放入列表,然后使用随机索引检索随机条目

Hashtable<Object, Object> test = new Hashtable<Object, Object>();

test.put("t", 1);
test.put(2, "t123");
test.put(3, true);

List<Entry<Object, Object>> entries = new ArrayList<Entry<Object, Object>>(test.entrySet());
Random random = new Random();
Entry<Object, Object> randomEntry = entries.get(random.nextInt(entries.size()));

Object randomValue = randomEntry.getValue();
Object randomKey = randomEntry.getKey();
Hashtable test=newhashtable();
测试。放置(“t”,1);
测试。放置(2,“t123”);
测试。输入(3,正确);
列表条目=新的ArrayList(test.entrySet());
随机=新随机();
Entry randomEntry=entries.get(random.nextInt(entries.size());
对象randomValue=randomEntry.getValue();
Object randomKey=randomEntry.getKey();

您可以将所有条目放入列表,然后使用随机索引检索随机条目

Hashtable<Object, Object> test = new Hashtable<Object, Object>();

test.put("t", 1);
test.put(2, "t123");
test.put(3, true);

List<Entry<Object, Object>> entries = new ArrayList<Entry<Object, Object>>(test.entrySet());
Random random = new Random();
Entry<Object, Object> randomEntry = entries.get(random.nextInt(entries.size()));

Object randomValue = randomEntry.getValue();
Object randomKey = randomEntry.getKey();
Hashtable test=newhashtable();
测试。放置(“t”,1);
测试。放置(2,“t123”);
测试。输入(3,正确);
列表条目=新的ArrayList(test.entrySet());
随机=新随机();
Entry randomEntry=entries.get(random.nextInt(entries.size());
对象randomValue=randomEntry.getValue();
Object randomKey=randomEntry.getKey();
如果您的意思是“任何”:

如果你的意思是“任何”:


在O(1)中无法从哈希表中获取随机元素,但在O(n)中获取随机元素的最有效方法如下:

int chosenIndex = (int) Math.random()*map.size();
    i = 0;
for (Object v : map.values())
  if (i++ == chosenIndex) 
    return v;

顺便说一句,永远不要使用Hashtable类,它仍然存在,只是为了向后兼容。使用
HashMap

在O(1)中无法从哈希表中获取随机元素,但在O(n)中获取随机元素的最有效方法如下:

int chosenIndex = (int) Math.random()*map.size();
    i = 0;
for (Object v : map.values())
  if (i++ == chosenIndex) 
    return v;
HashMap<Integer, String> map = new   HashMap<Integer, String>();
        map.put(10, "ddsadas");
        map.put(23, "sdss");
        map.put(24, "sdss");
        map.put(90, "sdss");
顺便说一句,永远不要使用Hashtable类,它仍然存在,只是为了向后兼容。使用
HashMap

HashMap<Integer, String> map = new   HashMap<Integer, String>();
        map.put(10, "ddsadas");
        map.put(23, "sdss");
        map.put(24, "sdss");
        map.put(90, "sdss");
您可以在
O(1)
中实现这一点,方法是将集合放入数组,在数组索引中生成一个随机数,然后只返回数组索引中的值。这是
o(1)


您可以在
O(1)
中实现这一点,方法是将集合放入数组,在数组索引中生成一个随机数,然后只返回数组索引中的值。这是
o(1)

我认为它有entrySet()方法,这可能会有所帮助。但是为什么要用哈希表而不是arraylist或array呢?为什么需要字符串键?我认为它有entrySet()方法,这可能会有所帮助。但是为什么要用哈希表而不是arraylist或array呢?你为什么需要串钥匙?谢谢。这个简单又好。是的,我指的是随机或任何:)随机指的是分布在你的样本空间中的,这在这里没有发生。我知道它的意思,但正如你所看到的,我的作者写了“是的,我指的是随机或任何”。@RuslanOstafiychuk然后他应该在原始问题中将问题改为
any
而不是
random
。@尝试一下“返回任意值或获取随机键”(可能他后来添加了它)谢谢。这一个简单而好。是的,我指的是随机或任意:)随机指的是在您的样本空间中分布良好,这在这里并没有发生。我知道这意味着什么,但我正如您所见,作者写道:“是的,我指的是随机或任意。”“@RuslanOstafiychuk然后他应该在原始问题中将问题改为
any
而不是
random
。@尝试“返回任何值或获取随机键”(可能他后来添加了它)我认为我们太超前了,OP want
any
键似乎就是抛出第一个值。请参阅下面的讨论:)是的,我看到了。但由于问题的措辞暗示了一个随机元素,因此实际需要哈希表中随机元素的人仍然可以访问此页面。Marko Topolnik非常正确。我认为我们走得太远了,OP want
any
键似乎就是抛出第一个值。请参阅下面的讨论:)是的,我看到了。但是由于这个问题的措辞暗示了一个随机元素,这个页面仍然可以被一些实际需要哈希表中随机元素的人访问。Marko Topolnik非常正确。