包含且仅当在Collection类中使用Java时

时间:2014-04-12 20:16:17

标签: java collections map hashmap

Map<String, Integer> successors = new HashMap <String, Integer> ();
// I have added some elements into the successors.
 Collection<Integer> uniqueValues = successors.values();

有没有办法让我在java中找到uniqueValues可以告诉我其中的所有值是否相同?

我计划使用if(uniqueValues.contains(1))语句。但我无法理解。由于如果存在1,则该语句将为真,并且还存在不同于1的其他值。如果1是集合中唯一的值,我只想让它返回true。

eg; {1,1,1,1,1,1,1,1,1,1,1,1,1} should return true. But {1,2,1,3,1,4,2,4,22,1,1,1,4} should return false.

一些代码沿着“包含当前和仅当。”
这将是非常有帮助的。提前谢谢。

3 个答案:

答案 0 :(得分:2)

以CPU时钟浪费的方式做到:

 if(new HashSet(successors.values()).size()>1) {...}

答案 1 :(得分:1)

某种Set听起来像最简单的解决方案

if(new HashSet<Integer>(successors.values)).size() == 1) 

由于Set只能包含唯一值,因此具有相同值的输入集合的逻辑结果是大小为1的Set。或者您当然可以介绍自己的util方法来检查这种情况。

答案 2 :(得分:1)

嗯,你可以做这样的事情(效率低下),

boolean uniqueValues = new HashSet<Integer>(successors.values()).size() == 1;

由于每次都会检查每个值,因此可能会采用更有效的方法,

boolean uniqueValues = true;
Collection<Integer> values = successors.values();
Iterator<Integer> iter = values.iterator();
if (iter.hasNext()) {
  int t = iter.next();
  while (iter.hasNext()) {
    int i = iter.next();
    if (t != i) {
      // stop if we find a different value
      uniqueValues = false;
      break;
    }
  }   
}