方法get(int)未定义类型Set

时间:2014-12-18 14:11:42

标签: java

我写了一段逻辑,我的目标是从地图中选择随机密钥。地图已被指定为ConcurrentSkipListMap<Text,IntWritable> tuples。另外,我对Java没有任何工业级经验,因此很难克服这个问题。

这段代码是

Set<Text> keys = tuples.keySet();
String randomKeys = keys.get(random.netInt(keys.size()))

我无法找出错误陈述:method get(int) is undefined for the type Set<Text>

此外,我搜索了类似的问题,并且使用List确实存在解决方案,但我的键/值对存储为ConcurrentSkipListMap,因此无法弄清楚这一点。

感谢。

2 个答案:

答案 0 :(得分:4)

首先,Set没有get()方法。您可以使用List。此外,它是Random.nextInt()

List<Text> keys = new ArrayList<>(tuples.keySet());
Text randomKeys = keys.get(random.nextInt(keys.size()));

此外,根据您的使用情况,我认为Collections.shuffle(List) 一次可能会更好,然后迭代它(可能使用for-each loop),如

List<Text> keys = new ArrayList<>(tuples.keySet());
Collections.shuffle(keys);
for (String randomKey : keys) {
  // ...
}

答案 1 :(得分:0)

Set没有get()方法,因为它不像。

那样的数组

你可以通过迭代器迭代Set:set.iteraor()。next()

迭代器接口实现了以下方法:

public boolean hasNext()
public E next()
public void remove()

你可以像这里一样使用它(在这种情况下是一个Set):

Iterator it = set.iterator();
while (it.hasNext())
{         
        String setText = (String) it.next();
        System.out.println(setText);
}