javasethashset

If only one element in a hashset, how can I get it out?


I have a set like below:

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

How can I get the 1 out? I can do it by for(integer i : set). My specified problem is "Given an array of integers, every element appears twice except for one. Find that single one."

I want to use add elements into the set if the set doesn't contain it and remove existing elements during the loop. And the last remaining element is the answer. I don't know how to return it.

public static int singleNumber(int[] A) {
    HashSet<Integer> set = new HashSet<>();
    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];
}

Solution

  • Simply try using HashSet#toArray() method

    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
    }