CodeGym/Java Blog/Acak/Perangkat Jawa
John Squirrels
Level 41
San Francisco

Perangkat Jawa

Dipublikasikan di grup Acak
anggota
Set adalah antarmuka dalam Java Collection Framework. Anda dapat menggunakan Java Set untuk mengimplementasikan koleksi tak terurut dengan elemen unik. Pada artikel ini, kita akan melihat antarmuka ini dan implementasinya dalam bahasa Java, metode untuk bekerja dengan himpunan, dan juga memberikan beberapa contoh.

Apa itu JavaSet

Set adalah antarmuka dari Java Collection Framework, tetapi Set bukanlah koleksi yang diurutkan, tidak seperti List . Itu berarti elemen Java Set disimpan tanpa urutan tertentu. Jadi tidak ada kontrol atas posisi di mana Anda dapat memasukkan elemen. Anda juga tidak dapat mengakses elemen berdasarkan indeksnya. Secara matematis, Set adalah kumpulan elemen unik. Faktanya, ini adalah Koleksi yang tidak terurut (Unordered Collection), di mana elemen identik tidak dapat disimpan. Jika Anda dengan sengaja menambahkan elemen duplikat ke Set , tindakan ini akan diabaikan dan Set tidak akan berubah. Namun diperbolehkan untuk menyimpan satu elemen nol di dalamnya.

Tetapkan implementasi

Java Set adalah antarmuka, jadi Anda perlu menggunakan salah satu implementasinya untuk membuat objek. Ini adalah HashSet , TreeSet dan LinkedHashSet . Di Set s, setiap elemen disimpan hanya dalam satu instance, dan implementasi Set yang berbeda menggunakan urutan berbeda untuk menyimpan elemen. Dalam HashSet , urutan elemen ditentukan oleh algoritme yang kompleks. Jika urutan penyimpanan penting bagi Anda, gunakan wadah TreeSet , yang menyimpan objek yang diurutkan dalam urutan menaik dalam urutan perbandingan, atau LinkedHashSet, yang menyimpan elemen sebagai tambahan urutan. Set sering digunakan untuk pengujian keanggotaan sehingga Anda dapat dengan mudah memeriksa apakah suatu objek termasuk dalam set yang diberikan, jadi dalam praktiknya implementasi HashSet yang dioptimalkan untuk pencarian cepat biasanya dipilih. HashSet adalah kumpulan yang menggunakan nilai hashnya yang dikembalikan oleh metode hashCode() untuk menyimpan elemen secara internal. Artinya, di dalam HashSet<E> , objek HashMap<E, Object> disimpan, yang menyimpan nilai HashSet sebagai kunci. Menggunakan kode hash memungkinkan Anda mencari, menambah, dan menghapus elemen dari Set dengan cepat . LinkedHashSet adalah HashSetyang juga menyimpan elemen dalam daftar tertaut. HashSet normal tidak mempertahankan urutan elemen. Pertama, secara resmi tidak ada, dan kedua, bahkan tatanan internal dapat berubah secara dramatis ketika hanya satu elemen yang ditambahkan. Dan Anda bisa mendapatkan iterator dari LinkedHashSet dan menggunakannya untuk menelusuri semua elemen dalam urutan yang tepat saat ditambahkan ke LinkedHashSet . Tidak sering, tetapi terkadang sangat diperlukan. TreeSet adalah koleksi yang menyimpan elemen sebagai pohon urutan nilai. Di dalam TreeSet<E> adalah TreeMap<E, Object> yang menyimpan semua nilai ini. Dan TreeMap inimenggunakan pohon biner seimbang merah-hitam untuk menyimpan elemen. Oleh karena itu, ia memiliki operasi add() , remove() , contains() yang sangat cepat.

Buat Objek Set

Untuk membuat Set Object Anda dapat menggunakan salah satu dari bentuk berikut:
Set<Integer> intSet = new HashSet<>();
Set<String> vSet = new HashSet<>();
Set mySet = new LinkedHashSet();
HashSet<String> myHashset = new HashSet<>();
Berikut adalah contoh sederhana, di mana kita membuat 2 Set s, HashSet dan LinkedHashSet , dan menambahkan masing-masing untuk 5 elemen. Kita dapat menggunakan metode add() untuk ini.
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;

public class HashSetTest {
    public static void main(String[] args) {
        Set mySet = new HashSet();
        Set mySet2 = new LinkedHashSet();
//adding some string elements
        mySet.add("Stuart");
        mySet.add("Alex");
        mySet.add("Johnny");
        mySet.add("Igor");
        mySet.add("Bel");
        System.out.println(mySet);
        mySet2.add("Stuart");
        mySet2.add("Alex");
        mySet2.add("Johnny");
        mySet2.add("Igor");
        mySet2.add("Bel");
        System.out.println(mySet2);
    }
}
Berikut output dari programnya:
[Alex, Igor, Stuart, Johnny, Bel] [Stuart, Alex, Johnny, Igor, Bel]
Seperti yang kami sebutkan di atas, HashSet tidak mempertahankan urutan elemen, tetapi LinkedHashSet melakukannya. Itu adalah LinkedHashSet yang memberi kami elemen sesuai urutan kami menulisnya ke set.

Metode Set Java

Berikut adalah beberapa metode penting Java Set :
  • boolean add(E e) . Menambahkan elemen yang ditentukan ke set jika belum ada (operasi opsional).

  • boolean hapus(Objek o) . Menghapus elemen yang ditentukan dari set ini jika ada (operasi opsional).

  • boolean removeAll(Koleksi c) . Menghapus dari kumpulan ini semua elemennya yang terkandung dalam koleksi yang ditentukan (operasi opsional).

  • boolean retainAll(Koleksi c) . Mempertahankan hanya elemen dalam set ini yang terkandung dalam koleksi yang ditentukan (opsional operasi).

  • batal jelas() . Menghapus semua elemen dari set.

  • Iterator iterator() . Mengembalikan iterator pada elemen di set ini.

  • int ukuran() . itu digunakan untuk mendapatkan jumlah elemen di Set.

  • boolean isEmpty() . untuk memeriksa apakah Set kosong atau tidak.

  • boolean berisi(Objek o) . Mengembalikan nilai true jika Set ini berisi elemen yang ditentukan.

  • Iterator iterator() . Mengembalikan iterator pada elemen di set ini. Elemen dikembalikan tanpa urutan tertentu.

  • Objek[] keArray() . Mengembalikan array yang berisi semua elemen dalam set ini. Jika set ini membuat jaminan untuk urutan apa elemennya dikembalikan oleh iteratornya, metode ini harus mengembalikan elemen dalam urutan yang sama.

Metodenya mirip dengan ArrayList , kecuali metode add(Object o) hanya menambahkan objek ke set jika belum ada. Nilai kembalian dari metode adalah benar jika objek telah ditambahkan, dan salah jika sebaliknya. Ada juga beberapa metode yang diwarisi dari Collection<> Interface: parallelStream() , removeIf() , stream() dan forEach() metode yang diwarisi dari Java.lang.Iterable Interface.

Contoh operasi utama Java Set

Dalam contoh ini, kami membuat larik string dan meneruskannya ke mySet menggunakan operasi Arrays.asList . Kemudian kami menghapus beberapa elemen lagi, dan menambahkan beberapa elemen lagi. Dalam hal ini, salah satu elemen dalam himpunan sudah ada: tidak akan ditambahkan. Kami juga akan mencoba operasi memeriksa kekosongan isEmpty() , menentukan ukuran set size() dan membersihkan set semua elemen clear() .
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class HashSetTest2 {
   public static void main(String[] args) {
       //creating a string Array with some names
       String [] friends =  {"Stuart", "Ivy", "Johnny", "Alex", "Igor", "Tanya"};
       //creating a new set and adding elements from string array into it
       Set<String> mySet = new HashSet<>(Arrays.asList(friends));
       System.out.println(mySet);
       //removing two elements from the set
       mySet.remove("Igor");
       mySet.remove("Stuart");

       System.out.println(mySet);

       //adding 2 new Elements into set
       mySet.add("Dasha");
       mySet.add("Alex"); //it's second Alex, can't be added
       System.out.println(mySet);
       //cheking the size of mySet
       int size = mySet.size();
       System.out.println("The quantity of set's elements = " + size);
       //Checking if the set is empty
       System.out.println("Is mySet empty? " + mySet.isEmpty());
       //checking if some elements are in set
       System.out.println("Is Igor in set? " + mySet.contains("Igor"));
       System.out.println("Is Johnny in set? "+ mySet.contains("Johnny"));
       //deleting all elements from the set
       mySet.clear();
       System.out.println("Is mySet empty now? " + mySet.isEmpty());

   }
}
Keluaran programnya ada di sini:
[Alex, Igor, Stuart, Tanya, Johnny, Ivy] [Alex, Tanya, Johnny, Ivy] [Alex, Dasha, Tanya, Johnny, Ivy] Jumlah elemen set = 5 Apakah set saya kosong? salah Apakah Igor siap? salah Apakah Johnny siap? benar Apakah mySet kosong sekarang? BENAR

Contoh dengan LinkedHashSet dan atur ke Array

Mari kita menulis program lain. Di dalamnya, kita akan membuat satu set berdasarkan LinkedHashSet , menambahkan elemen ke dalamnya, lalu mengonversi set menjadi array.
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;
   public class LinkedHashSet3 {
       public static void main(String[] args) {
           Set<String> set = new LinkedHashSet<>();
           set.add("C");
           set.add("D");
           set.add("E");
           set.add("F");
           set.add("G");
           set.add("A");
           set.add("B");
           System.out.println(set);
           set.remove("F");// removing an element from our set
           set.remove("C sharp");//trying to remove element that isn't in set
           System.out.println(set.remove("C sharp"));
           System.out.println("Print our set with elements removed: ");
           System.out.println(set);

//set to array
           String strArray[] = set.toArray(new String[set.size()]);
           System.out.println("New Array from set: ");
           System.out.println(Arrays.toString(strArray));
           System.out.println(strArray[0]);

       }
   }
Berikut output dari programnya:
[C, D, E, F, G, A, B] false Cetak himpunan kita dengan elemen dihapus: [C, D, E, G, A, B] Array baru dari himpunan: [C, D, E, G, A, B] C

Tetapkan contoh dengan iterator

Mari buat satu set, lalu cetak menggunakan iterator, lalu hapus semua bilangan genap darinya, juga menggunakan iterator.
import java.util.*;

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

       Set<Integer> mySet = new HashSe<>();
       for(int i = 0; i < 10; i++)
           mySet.add(i);

       Iterator iterator = mySet.iterator();

       //simple iteration
       while(iterator.hasNext()){
           int i = (int) iterator.next();
       }
       System.out.println(" " + mySet);

       //modification of mySet using iterator - removing all even numbers
       iterator = mySet.iterator();
       while(iterator.hasNext()){
           int x = (int) iterator.next();
           if(x%2 == 0) iterator.remove();
       }
       System.out.println(mySet);

       }
}
Keluaran programnya ada di sini:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 3, 5, 7, 9

Contoh dengan TreeSet

Jika penyortiran penting bagi Anda, gunakan implementasi TreeSet . Pada contoh singkat ini kita akan mengisi himpunan dengan nama-nama teman, seperti pada contoh sebelumnya. Namun, dalam TreeSet yang diurutkan , elemen akan segera ditulis dalam urutan yang diurutkan. Dalam hal ini, nama akan ditampilkan menurut abjad.
import java.util.Set;
import java.util.TreeSet;
public class TreeSetTest {

   public static void main(String[] args) {

       Set mySet = new TreeSet<>();
       mySet.add("Stuart");
       mySet.add("Alex");
       mySet.add("Johnny");
       mySet.add("Igor");
       mySet.add("Bel");
       System.out.println(mySet);

   }
Outputnya adalah:
[Alex, Bel, Igor, Johnny, Stuart]

Kesimpulan singkat

  • Antarmuka Java Set adalah bagian dari Java Collections Framework.

  • Kelas yang diimplementasikan: AbstractSet , ConcurrentHashMap.KeySetView , ConcurrentSkipListSet , CopyOnWriteArraySet , EnumSet , HashSet , JobStateReasons , LinkedHashSet , TreeSet .

  • Implementasi Set yang paling populer adalah HashSet , LinkedHashSet dan TreeSet .

  • Urutan elemen HashSet ditentukan oleh algoritma yang kompleks. Jika urutan penyimpanan penting bagi Anda, gunakan wadah TreeSet , yang menyimpan objek yang diurutkan dalam urutan menaik dalam urutan perbandingan, atau LinkedHashSet , yang menyimpan elemen dalam urutan tambahan.

  • Paling sering, set digunakan untuk menguji keanggotaan. Artinya, untuk memeriksa apakah suatu objek termasuk dalam himpunan yang diberikan dalam pengertian matematis. Jadi paling sering dari semua implementasi Set dalam praktiknya, HashSet biasanya dipilih. Implementasi ini dioptimalkan untuk pencarian cepat.

  • Anda tidak bisa menambahkan elemen duplikat ke set, sehingga Anda bisa menggunakan implementasi antarmuka Set untuk menyimpan elemen unik.

  • Set memungkinkan Anda untuk menambahkan hanya satu elemen nol.

  • Set bukan daftar dan tidak mendukung indeks atau posisi elemennya.

Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar