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:
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.
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:
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:
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:
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:
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.
GO TO FULL VERSION