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:
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.
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:
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:
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:
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:
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.