Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

Java TreeSet

Java TreeSet

Dalam tutorial ini, kita akan belajar tentang kelas Java TreeSet dan berbagai operasi dan metodenya dengan bantuan contoh.

TreeSet kelas kerangka koleksi Java menyediakan fungsionalitas struktur data pohon.

Ini memperluas antarmuka NavigableSet.


Membuat TreeSet

Untuk membuat kumpulan pohon, kita harus mengimpor java.util.TreeSet paket dulu.

Setelah kita mengimpor paket, berikut adalah cara membuat TreeSet di Jawa.


TreeSet<Integer> numbers = new TreeSet<>();

Di sini, kami telah membuat TreeSet tanpa argumen apapun. Dalam hal ini, elemen dalam TreeSet diurutkan secara alami (urutan menaik).

Namun, kita dapat menyesuaikan pengurutan elemen dengan menggunakan Comparator antarmuka. Kita akan mempelajarinya nanti dalam tutorial ini.


Metode TreeSet

TreeSet class menyediakan berbagai metode yang memungkinkan kita untuk melakukan berbagai operasi di set.


Sisipkan Elemen ke TreeSet

Misalnya,

import java.util.TreeSet;

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

        TreeSet<Integer> evenNumbers = new TreeSet<>();

        // Using the add() method
        evenNumbers.add(2);
        evenNumbers.add(4);
        evenNumbers.add(6);
        System.out.println("TreeSet: " + evenNumbers);

        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(1);

        // Using the addAll() method
        numbers.addAll(evenNumbers);
        System.out.println("New TreeSet: " + numbers);
    }
}

Keluaran

TreeSet: [2, 4, 6]
New TreeSet: [1, 2, 4, 6]

Akses Elemen TreeSet

Untuk mengakses elemen dari kumpulan pohon, kita dapat menggunakan iterator() metode. Untuk menggunakan metode ini, kita harus mengimpor java.util.Iterator kemasan. Misalnya,

import java.util.TreeSet;
import java.util.Iterator;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Calling iterator() method
        Iterator<Integer> iterate = numbers.iterator();
        System.out.print("TreeSet using Iterator: ");
        // Accessing elements
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

Keluaran

TreeSet: [2, 5, 6]
TreeSet using Iterator: 2, 5, 6,

Hapus Elemen

Misalnya,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using the remove() method
        boolean value1 = numbers.remove(5);
        System.out.println("Is 5 removed? " + value1);

        // Using the removeAll() method
        boolean value2 = numbers.removeAll(numbers);
        System.out.println("Are all elements removed? " + value2);
    }
}

Keluaran

TreeSet: [2, 5, 6]
Is 5 removed? true
Are all elements removed? true

Sejak TreeSet kelas mengimplementasikan NavigableSet , ini menyediakan berbagai metode untuk menavigasi elemen dari kumpulan pohon.

1. Metode pertama() dan terakhir()

Misalnya,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using the first() method
        int first = numbers.first();
        System.out.println("First Number: " + first);

        // Using the last() method
        int last = numbers.last();
        System.out.println("Last Number: " + last);
    }
}

Keluaran

TreeSet: [2, 5, 6]
First Number: 2
Last Number: 6

2. langit-langit (), lantai (), lebih tinggi () dan lebih rendah () Metode

Misalnya,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using higher()
        System.out.println("Using higher: " + numbers.higher(4));

        // Using lower()
        System.out.println("Using lower: " + numbers.lower(4));

        // Using ceiling()
        System.out.println("Using ceiling: " + numbers.ceiling(4));

        // Using floor()
        System.out.println("Using floor: " + numbers.floor(3));

    }
}

Keluaran

TreeSet: [2, 4, 5, 6]
Using higher: 5
Using lower: 2
Using ceiling: 4
Using floor: 2

3. pollfirst() dan pollLast() Metode

Misalnya,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using pollFirst()
        System.out.println("Removed First Element: " + numbers.pollFirst());

        // Using pollLast()
        System.out.println("Removed Last Element: " + numbers.pollLast());

        System.out.println("New TreeSet: " + numbers);
    }
}

Keluaran

TreeSet: [2, 4, 5, 6]
Removed First Element: 2
Removed Last Element: 6
New TreeSet: [4, 5]

4. Metode headSet(), tailSet() dan subSet()


headSet(elemen, booleanValue)

headSet() metode mengembalikan semua elemen dari kumpulan pohon sebelum elemen yang ditentukan (yang diteruskan sebagai argumen).

booleanValue parameter adalah opsional. Nilai defaultnya adalah false .

Jika true diteruskan sebagai booleanValue , metode ini mengembalikan semua elemen sebelum elemen yang ditentukan termasuk elemen yang ditentukan.

Misalnya,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using headSet() with default boolean value
        System.out.println("Using headSet without boolean value: " + numbers.headSet(5));

        // Using headSet() with specified boolean value
        System.out.println("Using headSet with boolean value: " + numbers.headSet(5, true));
    }
}

Keluaran

TreeSet: [2, 4, 5, 6]
Using headSet without boolean value: [2, 4]
Using headSet with boolean value: [2, 4, 5]

tailSet(elemen, booleanValue)

tailSet() metode mengembalikan semua elemen dari kumpulan pohon setelah elemen yang ditentukan (yang diteruskan sebagai parameter) termasuk elemen specified yang ditentukan .

booleanValue parameter adalah opsional. Nilai defaultnya adalah true .

Jika false diteruskan sebagai booleanValue , metode mengembalikan semua elemen setelah elemen yang ditentukan tanpa menyertakan elemen yang ditentukan .

Misalnya,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using tailSet() with default boolean value
        System.out.println("Using tailSet without boolean value: " + numbers.tailSet(4));

        // Using tailSet() with specified boolean value
        System.out.println("Using tailSet with boolean value: " + numbers.tailSet(4, false));
    }
}

Keluaran

TreeSet: [2, 4, 5, 6]
Using tailSet without boolean value: [4, 5, 6]
Using tailSet with boolean value: [5, 6]

subSet(e1, bv1, e2, bv2)

subSet() metode mengembalikan semua elemen antara e1 dan e2 termasuk e1 .

bv1 dan bv2 adalah parameter opsional. Nilai default bv1 adalah true , dan nilai default bv2 adalah false .

Jika false diteruskan sebagai bv1 , metode ini mengembalikan semua elemen di antara e1 dan e2 tanpa menyertakan e1 .

Jika true diteruskan sebagai bv2 , metode ini mengembalikan semua elemen di antara e1 dan e2 , termasuk e1 .

Misalnya,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using subSet() with default boolean value
        System.out.println("Using subSet without boolean value: " + numbers.subSet(4, 6));

        // Using subSet() with specified boolean value
        System.out.println("Using subSet with boolean value: " + numbers.subSet(4, false, 6, true));
    }
}

Keluaran

TreeSet: [2, 4, 5, 6]
Using subSet without boolean value: [4, 5]
Using subSet with boolean value: [5, 6]

Setel Operasi

Metode TreeSet class juga dapat digunakan untuk melakukan berbagai operasi himpunan.


Kesatuan Himpunan

Untuk melakukan penyatuan antara dua set, kami menggunakan addAll() metode. Misalnya,

import java.util.TreeSet;;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> evenNumbers = new TreeSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("TreeSet1: " + evenNumbers);

        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        System.out.println("TreeSet2: " + numbers);

        // Union of two sets
        numbers.addAll(evenNumbers);
        System.out.println("Union is: " + numbers);

    }
}

Keluaran

TreeSet1: [2, 4]
TreeSet2: [1, 2, 3]
Union is: [1, 2, 3, 4]

Perpotongan Himpunan

Untuk melakukan perpotongan antara dua himpunan, kita menggunakan retainAll() metode. Misalnya,

import java.util.TreeSet;;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> evenNumbers = new TreeSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("TreeSet1: " + evenNumbers);

        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        System.out.println("TreeSet2: " + numbers);

        // Intersection of two sets
        numbers.retainAll(evenNumbers);
        System.out.println("Intersection is: " + numbers);
    }
}

Keluaran

TreeSet1: [2, 4]
TreeSet2: [1, 2, 3]
Intersection is: [2]

Perbedaan Himpunan

Untuk menghitung selisih antara kedua himpunan, kita dapat menggunakan removeAll() metode. Misalnya,

import java.util.TreeSet;;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> evenNumbers = new TreeSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("TreeSet1: " + evenNumbers);

        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        System.out.println("TreeSet2: " + numbers);

        // Difference between two sets
        numbers.removeAll(evenNumbers);
        System.out.println("Difference is: " + numbers);
    }
}

Keluaran

TreeSet1: [2, 4]
TreeSet2: [1, 2, 3, 4]
Difference is: [1, 3]

Subset dari Himpunan

Untuk memeriksa apakah suatu himpunan merupakan himpunan bagian dari himpunan lain atau bukan, kita menggunakan containsAll() metode. Misalnya,

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        System.out.println("TreeSet1: " + numbers);

        TreeSet<Integer> primeNumbers = new TreeSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("TreeSet2: " + primeNumbers);

        // Check if primeNumbers is subset of numbers
        boolean result = numbers.containsAll(primeNumbers);
        System.out.println("Is TreeSet2 subset of TreeSet1? " + result);
    }
}

Keluaran

TreeSet1: [1, 2, 3, 4]
TreeSet2: [2, 3]
Is TreeSet2 subset of TreeSet1? True

Metode TreeSet Lainnya

Metode Deskripsi
clone() Membuat salinan TreeSet
contains() Menelusuri TreeSet untuk elemen yang ditentukan dan mengembalikan hasil boolean
isEmpty() Memeriksa apakah TreeSet kosong
size() Mengembalikan ukuran TreeSet
clear() Menghapus semua elemen dari TreeSet

Untuk mempelajari lebih lanjut, kunjungi Java TreeSet (dokumentasi resmi Java).


TreeSet Vs. HashSet

Keduanya TreeSet serta HashSet mengimplementasikan Set antarmuka. Namun, ada beberapa perbedaan di antara mereka.


Pembanding TreeSet

Dalam semua contoh di atas, elemen kumpulan pohon diurutkan secara alami. Namun, kami juga dapat menyesuaikan urutan elemen.

Untuk ini, kita perlu membuat kelas pembanding kita sendiri berdasarkan elemen mana dalam kumpulan pohon yang diurutkan. Misalnya,

import java.util.TreeSet;
import java.util.Comparator;

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

        // Creating a tree set with customized comparator
        TreeSet<String> animals = new TreeSet<>(new CustomComparator());

        animals.add("Dog");
        animals.add("Zebra");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("TreeSet: " + animals);
    }

    // Creating a comparator class
    public static class CustomComparator implements Comparator<String> {

        @Override
        public int compare(String animal1, String animal2) {
            int value =  animal1.compareTo(animal2);

            // elements are sorted in reverse order
            if (value > 0) {
                return -1;
            }
            else if (value < 0) {
                return 1;
            }
            else {
                return 0;
            }
        }
    }
}

Keluaran

TreeSet: [Zebra, Horse, Dog, Cat]

Pada contoh di atas, kami telah membuat kumpulan pohon yang melewati CustomComparator kelas sebagai argumen.

CustomComparator kelas mengimplementasikan Comparator antarmuka.

Kami kemudian menimpa compare() metode. Metode ini sekarang akan mengurutkan elemen dalam urutan terbalik.

Untuk mempelajari lebih lanjut, kunjungi Java Comparator (dokumentasi resmi Java).


java

  1. Operator Jawa
  2. Komentar Jawa
  3. Java untuk setiap Loop
  4. String Jawa
  5. Antarmuka Jawa
  6. Kelas Anonim Java
  7. Java mencoba-dengan-sumber daya
  8. Anotasi Jawa
  9. Pernyataan Jawa
  10. Algoritma Java