## What is a HashSet

A `HashSet`

is an unordered collection containing unique elements. It has the standard collection operations Add, Remove, Contains, but since it uses a hash-based implementation, these operations are O(1)

## Learn with a Programming Question

Given an integer array with **even** length, where different numbers in this array represent different **kinds** of candies. Each number means one candy of the corresponding kind. You need to distribute these candies **equally** in number to brother and sister. Return the maximum number of **kinds** of candies the sister could gain.

**Example 1:**

Input:candies = [1,1,2,2,3,3]Output:3Explanation:There are three different kinds of candies (1, 2 and 3), and two candies for each kind. Optimal distribution: The sister has candies [1,2,3] and the brother has candies [1,2,3], too. The sister has three different kinds of candies.

**Example 2:**

Input:candies = [1,1,2,3]Output:2Explanation:For example, the sister has candies [2,3] and the brother has candies [1,1]. The sister has two different kinds of candies, the brother has only one kind of candies.

**Note:**

- The length of the given array is in range [2, 10,000], and will be even.
- The number in given array is in range [-100,000, 100,000].

## The Solution using a HashSet

```
// Our class
class Solution {
// Our method call
public int distributeCandies(int[] candies) {
// Use a HashSet to store all the intergers
HashSet<Integer> set = new HashSet<>();
// for each candy
for (int candy: candies) {
// add it to the set
set.add(candy);
}
// Return the minimum between the size and half the length
return Math.min(set.size(), candies.length / 2);
}
}
```