如果hashset中只有一个元素,我怎么能把它拿出来?

时间:2014-05-11 17:29:19

标签: java hashset

HashSet<Integer> set = new HashSet<Integer>();
set.add(1);

如何获取1?我可以通过for(integer i : set)来完成。你有另一个想法来解决这个问题吗?

我指定的问题是&#34;给定一个整数数组,除了一个元素外,每个元素都会出现两次。找到那一个。&#34; 如果集合不包含它,我想在集合中使用添加元素,并在循环期间删除现有元素。最后一个要素就是答案。我不知道如何归还。

    public static int singleNumber(int[] A) {
    HashSet<Integer> set = new HashSet<Integer>();
    for (int a : A) {
        if (!set.contains(a)) {
            set.add(a);
        } else {
            set.remove(a);
        }
    }
    /**
     * for(Integer i : set) { return i; }
     *return A[0];//need one useless return
    /**
     * while(set.iterator().hasNext()) { return set.iterator().next(); }
     * return A[0];//need one useless return
     */
    return set.toArray(new Integer[1])[0];
}

4 个答案:

答案 0 :(得分:9)

set.iterator().next()

只有在您确定集合中有元素时才这样做。否则next()将抛出异常。

答案 1 :(得分:2)

只需尝试使用HashSet#toArray()方法

HashSet<Integer> set = new HashSet<Integer>();
set.add(1);

if (set.size() == 1) { // make sure that there is only one element in set
    Integer value = set.toArray(new Integer[1])[0];
    System.out.println(value);//output 1
}

答案 2 :(得分:0)

典型的解决方案包括检查当前迭代器位置是否有通过setIterator.hasNext()的左侧元素,只有在未选中额外元素时才会返回true。例如

HashSet set = new HashSet(); 
Iterator setIterator = set.iterator();
while(setIterator.hasNext()){
   String item = setIterator().next();
   ...
}

答案 3 :(得分:0)

如果您知道该元素是什么,并且您只想清空该集合,则可以使用remove(Object o)(或clear()来解决此问题)。如果您不知道它是什么,并希望在不删除它的情况下查看它,请使用迭代器。如果你不知道它是什么并想要删除它,你应该使用迭代器的remove()方法使用迭代器。这是从集合中删除元素的安全(和推荐)方法。由于Set是无序的,因此很难指定要删除的内容。对于任何集合,如果您遍历集合,通常只会知道要删除的内容。