Set boleh digunakan untuk menyimpan data yang lain dari yang lain. Jika ada yang sama, Set akan menyimpan satu sahaja. Class yang menggunakan interface Set antaranya ialah HashSet, TreeSet, dan LinkedHashSet.

HashSet

HashSet digunakan jika kita tidak kisah bagaimana kedudukan data di dalam Set. Dari segi performance, HashSet adalah yang terbaik.

Contoh penggunaannya:

package datastructure;

import java.util.HashSet;
import java.util.Set;

public class ContohSet {
    public static void main( args) {
        Set<String> kuih = new HashSet<>();
        kuih.add("karipap");
        kuih.add("donat");
        kuih.add("kuih lapis");
        kuih.add("karipap");

        for (String k : kuih) {
            System.out.println(k);
        }
    }
}

Hasilnya hanya satu karipap sahaja yang ada dalam Set tersebut walaupun kita masukkan dua. Perhatikan juga kedudukan kuih tidak mengikut urutan seperti yang kita masukkan.

TreeSet

TreeSet akan menyusun data di dalamnya mengikut nilai data tersebut, contohnya jika nombor akan mengikut urutan angka naik, jika String akan mengikut huruf:

package datastructure;

import java.util.Set;
import java.util.TreeSet;

public class ContohSet {
    public static void main(String[] args) {
        Set<Integer> nombor = new TreeSet<>();
        nombor.add(10);
        nombor.add(10);
        nombor.add(5);
        nombor.add(12);

        for (Integer k : nombor) {
            System.out.println(k);
        }
    }
}

Dari segi performance, TreeSet adalah yang paling lambat.

LinkedHashSet

LinkedHashSet pula menyusun data mengikut urutan sebagaimana urutan kita memasukkan data:

package datastructure;

import java.util.LinkedHashSet;
import java.util.Set;

public class ContohSet {
    public static void main(String[] args) {
        Set<Integer> nombor = new LinkedHashSet<>();
        nombor.add(10);
        nombor.add(10);
        nombor.add(5);
        nombor.add(12);

        for (Integer k : nombor) {
            System.out.println(k);
        }
    }
}

Dari segi performance, LinkedHashSet hampir sama laju dengan HashSet.

Buang duplicate

Set boleh digunakan untuk membuang duplicate daripada data structure yang lain.

Contoh membuang duplicate dalam array:

package datastructure;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class ContohSet {
    public static void main(String[] args) {

        Integer[] nombor = {1, 1, 1, 1, 2, 3, 4, 4, 4, 5, 6, 6, 6, 6, 7};

        Set<Integer> setNombor = new HashSet<>(Arrays.asList(nombor));

        Integer[] nomborTanpaDuplicate = setNombor.toArray(new Integer[setNombor.size()]);

        for (Integer n : nomborTanpaDuplicate) {
            System.out.println(n);
        }
    }
}

Contoh membuang duplicate dalam List:

package datastructure;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class ContohSet {
    public static void main(String[] args) {
        List<String> listNama = new ArrayList<>();
        listNama.add("ali");
        listNama.add("ali");
        listNama.add("ali");

        Set<String> setNama = new HashSet<>(listNama);

        listNama.clear();
        listNama.addAll(setNama);

        for (String nama : listNama) {
            System.out.println(nama);
        }
    }
}