// 6. hét – A Java beépített halmazai: HashSet és TreeSet
// Futtatás: java BuiltinSets.java
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class BuiltinSets {
    public static void main(String[] args) {
        // HashSet: hash táblán alapul (11. hét) – átlagosan O(1) műveletek, nincs sorrend
        Set<String> a = new HashSet<>(Set.of("Wuhan", "Beijing", "Eger", "Shanghai"));
        Set<String> b = new HashSet<>(Set.of("Eger", "Budapest", "Wuhan"));

        Set<String> union = new HashSet<>(a);
        union.addAll(b);
        Set<String> inter = new HashSet<>(a);
        inter.retainAll(b);
        Set<String> diff = new HashSet<>(a);
        diff.removeAll(b);
        System.out.println("A ∪ B = " + union);
        System.out.println("A ∩ B = " + inter);
        System.out.println("A \\ B = " + diff);
        System.out.println("contains(\"Eger\") = " + a.contains("Eger") + ", add(\"Eger\") = " + a.add("Eger") + " (már benne volt)");

        // TreeSet: kiegyensúlyozott keresőfán alapul (15. hét) – O(log n), RENDEZETT sorrend
        TreeSet<Integer> t = new TreeSet<>(Set.of(42, 7, 19, 3, 25));
        System.out.println("\nTreeSet: " + t + ", first = " + t.first() + ", last = " + t.last());
        System.out.println("19-nél nagyobb legkisebb: " + t.higher(19) + ", 20 alattiak: " + t.headSet(20));

        // Gyakori alkalmazás: ismétlődések kiszűrése
        int[] nums = { 3, 1, 3, 2, 1, 3 };
        Set<Integer> distinct = new TreeSet<>();
        for (int x : nums) distinct.add(x);
        System.out.println("különböző elemek: " + distinct);
    }
}
