Satu set hanyalah koleksi objek unik. Unik bermakna tiada dua objek boleh mempunyai nilai yang sama. Bergantung pada pelaksanaan set, ia mungkin dipesan atau tidak. Set Java, sebagai Jenis Data Abstrak (ADT), mempunyai beberapa operasi utama (di mana T mewakili mana-mana jenis data contohnya int, String atau sebarang objek kelas):
boolean add(T item)
: mengembalikan benar jika item berjaya ditambahkan pada set, dan palsu jika item itu sudah ada dalam set.boolean remove(T item)
: mengembalikan benar jika item berjaya dikeluarkan daripada set dan palsu sebaliknya (jika item itu tiada dalam set).boolean contains(T item)
: mengembalikan benar jika item berada dalam set dan palsu sebaliknya.boolean isEmpty()
: mengembalikan benar jika set kosong dan palsu sebaliknya.
contains()
memberikan masa jalan yang hebat untuk ini: O(1) atau O(log n) kerumitan masa bergantung pada jika pelaksanaan yang digunakan ialah a HashSet
atau aTreeSet
, masing-masing. Jadi untuk apa satu set boleh digunakan? Nah, jika anda perlu menjejaki banyak objek yang berbeza--seperti ID, nama atau pengecam unik lain--dan kerap menyemak sama ada item wujud dalam koleksi sedemikian, maka satu set berkemungkinan merupakan pilihan yang baik. Berikut ialah contoh kes penggunaan set: Bayangkan anda mempunyai senarai Student
objek yang mewakili semua pelajar dalam kelas tertentu. Setiap satu Student
mungkin mempunyai nama unik (rentetan) dan gred (int) untuk kelas ini. Jika anda ingin merujuk senarai semua pelajar A (gred >=90) dengan kerap, maka adalah membosankan untuk mengulang senarai ini dan menyemak gred setiap pelajar setiap kali. Sebaliknya, anda mungkin menggunakan HashSet
rentetan yang menjejaki semua pelajar A dalam kelas, seperti:
- Setiap kali gred pelajar dikemas kini, anda hanya boleh menyemak sama ada gred baharu Pelajar lebih besar daripada atau sama dengan 90 atau tidak.
- Jika ya, tambahkannya pada set A pelajar menggunakan
add()
- Jika mereka sudah menjadi pelajar A, maka operasi ini diabaikan begitu sahaja.
- Jika tidak, keluarkannya daripada set A pelajar menggunakan
remove()
- Jika mereka bukan pelajar A pada ketika ini, maka operasi ini diabaikan begitu sahaja.
- Jika ya, tambahkannya pada set A pelajar menggunakan
contains(“Johnny Appleseed”)
set. Sudah tentu, ini hanyalah satu contoh kes penggunaan untuk set, dan masalah khusus untuk menjejaki pelajar A ini boleh diselesaikan dengan cara lain.
Pelaksanaan: HashSet dalam Java dan Contoh Java TreeSet
Kedua-duaHashSet
di Jawa dan TreeSet
di Jawa datang dalam java.utils package
. Anda boleh mengimportnya seperti itu:
// imports everything from Java's util package, including HashSet and TreeSet
import java.util.*;
atau
import java.util.HashSet; // imports only the Java HashSet
import java.util.TreeSet; // imports only the Java TreeSet
Perbezaan utama antara Java HashSet
dan Java TreeSet
ialah yang TreeSet
diisih, sedangkan yang HashSet
tidak. Inilah sebabnya mengapa TreeSet
mempunyai kerumitan masa O(log n) untuk operasi utama, manakala HashSet
mempunyai kerumitan masa O(1) atau malar; mesti TreeSet
menjaga ketenteraman sepanjang masa. Sebagai tambahan kepada operasi set utama yang dinyatakan sebelum ini, kedua-dua HashSet
dan TreeSet
dalam Java mempunyai beberapa fungsi lain yang berguna:
void clear()
: mengosongkan set semua objek.int size()
: mengembalikan bilangan objek dalam set.Object clone()
: mengembalikan salinan cetek set.Iterator iterator()
: mengembalikan iterator ke set, bermula pada objek pertama.
size()
jika anda ingin melihat bilangan pelajar 'A' yang anda ada, atau clear()
jika anda ingin mengosongkan senarai pada akhir semester. Anda mungkin menggunakan clone()
untuk membuat dan menyimpan klon senarai pelajar A pada masa tertentu, seperti semasa laporan pertengahan penggal (dengan cara ini klon tidak kekal terkini bersama dengan yang asal).
Contoh Java HashSet
Berikut ialah contoh ringkas aHashSet
s String
yang digunakan di Jawa:
import java.util.HashSet;
class HashSetDemo {
public static void main(String[] args)
{
// create a HashSet of Strings
HashSet<String> hs = new HashSet<String>();
// Add elements using the add() method
hs.add("Collin");
hs.add("Bob");
hs.add("Abigail");
// Duplicates will ignored; this statement is useless
hs.add("Collin");
System.out.println(hs);
System.out.println("Bob is in the set (T/F): " + hs.contains("Bob"));
System.out.println("Max is in the set (T/F): " + hs.contains("Max"));
}
}
Pengeluaran: --------
[Collin, Bob, Abigail]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Contoh Java TreeSet
Contoh set Java boleh membantu anda memahami teori tersebut. Berikut ialah contoh ringkas aTreeSet
s String
yang digunakan di Jawa:
import java.util.TreeSet;
class TreeSetDemo {
public static void main(String[] args)
{
// create a TreeSet of Strings
TreeSet<String> ts = new TreeSet<String>();
// Add elements using the add() method.
ts.add("Collin");
ts.add("Bob");
ts.add("Abigail");
// Duplicates will ignored; this statement is useless
ts.add("Collin");
// printing the set prints the names in alphabetical order!
System.out.println(ts);
System.out.println("Bob is in the set (T/F): " + ts.contains("Bob"));
System.out.println("Max is in the set (T/F): " + ts.contains("Max"));
System.out.println("Size of the set: " + ts.size());
ts.clear();
System.out.println("Size of the set after clear(): " + ts.size());
}
}
Pengeluaran: -------
[Abigail, Bob, Collin]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Size of the set: 3
Size of the set after clear(): 0
Itu sahaja! Semoga ini membantu 😊