John Squirrels
Tahap
San Francisco

Set Java

Diterbitkan dalam kumpulan
Set ialah antara muka dalam Rangka Kerja Koleksi Java. Anda boleh menggunakan Java Set untuk melaksanakan koleksi tidak tertib dengan elemen unik. Dalam artikel ini, kita akan melihat antara muka ini dan pelaksanaannya dalam bahasa Java, kaedah untuk bekerja dengan set, dan juga memberikan beberapa contoh.

Apa itu Java Set

Set ialah antara muka daripada Rangka Kerja Koleksi Java, tetapi Set bukan koleksi tersusun, tidak seperti List . Ini bermakna elemen Java Set disimpan tanpa susunan tertentu. Jadi tiada kawalan ke atas kedudukan di mana anda boleh memasukkan elemen. Anda juga tidak boleh mengakses elemen mengikut indeks mereka. Secara matematik, Set ialah koleksi elemen unik. Sebenarnya, ini ialah Koleksi tidak tertib (Koleksi tidak tersusun), di mana elemen yang sama tidak boleh disimpan. Jika anda sengaja menambah elemen pendua pada Set , tindakan ini akan diabaikan dan Set tidak akan berubah. Walau bagaimanapun ia dibenarkan untuk menyimpan satu unsur nol di dalamnya.

Tetapkan pelaksanaan

Java Set ialah antara muka, jadi anda perlu menggunakan salah satu pelaksanaannya untuk mencipta objek. Ini ialah HashSet , TreeSet dan LinkedHashSet . Dalam Set s, setiap elemen disimpan dalam satu contoh sahaja dan pelaksanaan Set yang berbeza menggunakan susunan yang berbeza untuk menyimpan elemen. Dalam HashSet , susunan elemen ditentukan oleh algoritma yang kompleks. Jika pesanan storan penting kepada anda, gunakan bekas TreeSet , yang menyimpan objek yang diisih dalam tertib menaik dalam susunan perbandingan, atau LinkedHashSet, yang menyimpan elemen dalam susunan tambahan. Set selalunya digunakan untuk ujian keahlian supaya anda boleh menyemak dengan mudah sama ada objek kepunyaan set tertentu, jadi dalam praktiknya pelaksanaan HashSet yang dioptimumkan untuk carian pantas biasanya dipilih. HashSet ialah koleksi yang menggunakan nilai hashnya yang dikembalikan oleh kaedah hashCode() untuk menyimpan elemen secara dalaman. Iaitu, di dalam HashSet<E> , objek HashMap<E, Object> disimpan, yang menyimpan nilai HashSet sebagai kunci. Menggunakan kod cincang membolehkan anda mencari, menambah dan mengalih keluar elemen dengan cepat daripada Set . LinkedHashSet ialah HashSetyang juga menyimpan elemen dalam senarai terpaut. HashSet biasa tidak mengekalkan susunan elemen. Pertama, secara rasmi ia tidak wujud, dan kedua, susunan dalaman pun boleh berubah secara mendadak apabila hanya satu elemen ditambah. Dan anda boleh mendapatkan iterator daripada LinkedHashSet dan menggunakannya untuk meneliti semua elemen dalam susunan yang tepat di mana ia telah ditambahkan pada LinkedHashSet . Tidak kerap, tetapi kadangkala ia boleh menjadi sangat diperlukan. TreeSet ialah koleksi yang menyimpan elemen sebagai pokok tersusun nilai. Di dalam TreeSet<E> ialah TreeMap<E, Object> yang menyimpan semua nilai ini. Dan TreeMap inimenggunakan pokok binari seimbang merah-hitam untuk menyimpan elemen. Oleh itu, ia mempunyai operasi add() , remove() , contains() yang sangat pantas .

Buat Objek Set

Untuk mencipta Objek Set anda boleh menggunakan salah satu daripada borang seterusnya:
Set<Integer> intSet = new HashSet<>();
Set<String> vSet = new HashSet<>();
Set mySet = new LinkedHashSet();
HashSet<String> myHashset = new HashSet<>();
Berikut ialah contoh mudah, di mana kami mencipta 2 Set s, HashSet dan LinkedHashSet , dan menambah setiap satu untuk 5 elemen. Kita boleh menggunakan kaedah 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 adalah output program:
[Alex, Igor, Stuart, Johnny, Bel] [Stuart, Alex, Johnny, Igor, Bel]
Seperti yang kami nyatakan di atas, HashSet tidak mengekalkan susunan elemen, tetapi LinkedHashSet melakukannya. LinkedHashSetlah yang memberi kami unsur-unsur dalam susunan yang kami tuliskan pada set tersebut.

Kaedah Set Java

Berikut adalah beberapa kaedah penting Java Set :
  • boolean add(E e) . Menambah elemen yang ditentukan pada set jika ia belum ada (operasi pilihan).

  • boolean remove(Objek o) . Mengalih keluar elemen yang ditentukan daripada set ini jika ia ada (operasi pilihan).

  • boolean removeAll(Koleksi c) . Mengalih keluar daripada set ini semua elemennya yang terkandung dalam koleksi yang ditentukan (operasi pilihan).

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

  • void clear() . Mengeluarkan semua elemen dari set.

  • Iterator iterator() . Mengembalikan iterator ke atas elemen dalam set ini.

  • int saiz() . ia digunakan untuk mendapatkan bilangan elemen dalam Set.

  • boolean isEmpty() . untuk menyemak sama ada Set kosong atau tidak.

  • boolean mengandungi(Objek o) . Mengembalikan benar jika Set ini mengandungi elemen yang ditentukan.

  • Iterator iterator() . Mengembalikan iterator ke atas elemen dalam set ini. Unsur-unsur dikembalikan dalam susunan tertentu.

  • Object[] toArray() . Mengembalikan tatasusunan yang mengandungi semua elemen dalam set ini. Jika set ini membuat sebarang jaminan tentang susunan unsur-unsurnya yang dikembalikan oleh iteratornya, kaedah ini mesti mengembalikan elemen dalam susunan yang sama.

Kaedahnya serupa dengan ArrayList , kecuali kaedah add(Object o) hanya menambah objek pada set jika ia belum ada. Nilai pulangan kaedah adalah benar jika objek telah ditambah, dan palsu sebaliknya. Terdapat juga beberapa kaedah yang diwarisi daripada Collection<> Antara Muka: parallelStream() , removeIf() , stream() dan kaedah forEach() yang diwarisi daripada java.lang.Iterable Interface.

Java Tetapkan contoh operasi utama

Dalam contoh ini, kami mencipta tatasusunan rentetan dan kemudian menghantarnya ke mySet menggunakan operasi Arrays.asList . Kemudian kami mengalih keluar beberapa lagi elemen dan menambah beberapa lagi. Dalam kes ini, salah satu elemen dalam set sudah wujud: ia tidak akan ditambah. Kami juga akan mencuba operasi menyemak kekosongan isEmpty() , menentukan saiz set size() dan mengosongkan 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());

   }
}
Output program ada di sini:
[Alex, Igor, Stuart, Tanya, Johnny, Ivy] [Alex, Tanya, Johnny, Ivy] [Alex, Dasha, Tanya, Johnny, Ivy] Kuantiti unsur set = 5 Adakah mySet kosong? palsu Adakah Igor dalam set? palsu Adakah Johnny dalam set? benar Adakah mySet kosong sekarang? benar

Contoh dengan LinkedHashSet dan tetapkan kepada Array

Mari kita menulis program lain. Di dalamnya, kami akan mencipta set berdasarkan LinkedHashSet , menambah elemen padanya, dan kemudian menukar set itu kepada tatasusunan.
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 adalah output program:
[C, D, E, F, G, A, B] palsu Cetak set kami dengan elemen dialih keluar: [C, D, E, G, A, B] Tatasusunan Baharu daripada set: [C, D, E, G, A, B] C

Tetapkan contoh dengan iterator

Mari kita cipta satu set, kemudian cetaknya menggunakan iterator, dan kemudian keluarkan semua nombor genap daripadanya, 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);

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

Contoh dengan TreeSet

Jika pengisihan adalah penting kepada anda, kemudian gunakan pelaksanaan TreeSet . Dalam contoh ringkas ini, kami akan mengisi set dengan nama rakan, seperti dalam contoh sebelumnya. Walau bagaimanapun, dalam TreeSet yang diisih , unsur-unsur akan ditulis dengan serta-merta dalam susunan yang diisih. Dalam kes ini, nama akan dipaparkan mengikut 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 ialah:
[Alex, Bel, Igor, Johnny, Stuart]

Kesimpulan ringkas

  • Antara muka Set Java ialah sebahagian daripada Rangka Kerja Koleksi Java.

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

  • Pelaksanaan Set yang paling popular ialah HashSet , LinkedHashSet dan TreeSet .

  • Susunan elemen HashSet ditentukan oleh algoritma yang kompleks. Jika pesanan storan adalah penting kepada anda, gunakan bekas TreeSet , yang menyimpan objek yang diisih dalam tertib menaik dalam susunan perbandingan, atau LinkedHashSet , yang menyimpan elemen dalam susunan tambahan.

  • Selalunya, set digunakan untuk menguji keahlian. Iaitu, untuk memeriksa sama ada objek tergolong dalam set tertentu dalam erti kata matematik. Jadi paling kerap daripada semua pelaksanaan Set dalam amalan, HashSet biasanya dipilih. Pelaksanaan ini dioptimumkan untuk carian pantas.

  • Anda tidak boleh menambah elemen pendua pada set, jadi anda boleh menggunakan pelaksanaan antara muka Set untuk menyimpan elemen unik.

  • Set membolehkan anda menambah hanya satu elemen nol.

  • Set bukan senarai dan tidak menyokong indeks atau kedudukan elemennya.

Komen
  • Popular
  • Baru
  • Tua
Anda mesti log masuk untuk meninggalkan ulasan
Halaman ini tidak mempunyai sebarang ulasan lagi