Kelas
HashSet
ngleksanakake antarmuka Set
, adhedhasar tabel hash, lan uga didhukung dening conto HashMap
. Amarga HashSet
unsur-unsur kasebut ora diurutake, ora ana jaminan manawa unsur kasebut bakal ana ing urutan sing padha sawise sawetara wektu. Operasi nambah, mbusak lan nggoleki bakal ditindakake ing wektu sing tetep, yen fungsi hash nyebarake unsur kanthi bener menyang "ember", sing bakal dibahas mengko. Sawetara poin penting babagan HashSet
:
- Amarga kelas ngleksanakake antarmuka
Set
, mung bisa nyimpen nilai unik; - Bisa nyimpen nilai NULL;
- Urutan unsur sing ditambahake diwilang nggunakake kode hash;
HashSet
uga ngleksanakakeSerializable
lanCloneable
.
HashSet
, kudu langsung ceceg karo nomer unsur ing HashSet
+ "kapasitas" saka dibangun ing Kayata HashMap
(jumlah "kranjang"). Mulane, kanggo njaga kinerja, iku penting ora kanggo nyetel kapasitas dhisikan dhuwur banget (utawa faktor mbukak banget kurang). Kapasitas awal - nomer awal sel ("bins") ing tabel hash. Yen kabeh sel diisi, jumlahe bakal tambah kanthi otomatis. Faktor beban minangka ukuran sepira kebak HashSet
sadurunge kapasitas mundhak kanthi otomatis. Nalika jumlah unsur HashSet
dadi luwih gedhe tinimbang prodhuk saka kapasitas wiwitan lan faktor beban, tabel hash di-hash maneh (kode hash unsur kasebut diitung maneh lan tabel dibangun maneh miturut nilai sing dipikolehi) lan nomer sel ing iku tikel kaping pindho. Faktor beban = Jumlah unsur sing disimpen ing tabel / ukuran tabel hash Contone, yen jumlah sel wiwitan ing tabel yaiku 16, lan faktor beban yaiku 0,75, mula nalika jumlah sel sing diisi tekan 12, jumlah sel bakal nambah kanthi otomatis. Faktor beban lan kapasitas awal minangka rong faktor utama sing mengaruhi kinerja HashSet
. Faktor beban 0,75 nyedhiyakake kinerja rata-rata. Yen parameter iki tambah, beban memori bakal suda (amarga bakal nyuda jumlah re-hashes lan mbangun maneh), nanging bakal mengaruhi operasi append lan goleki. Kanggo nyilikake wektu ngginakaken ing re-hashing, sampeyan kudu milih parameter kapasitas dhisikan tengen. Yen kapasitas awal luwih saka jumlah maksimum unsur dibagi dening faktor mbukak, banjur ora ana operasi re-hashing bakal kelakon. penting: HashSet
ora struktur data karo dibangun ing sinkronisasi, supaya yen sawetara Utas digunakake ing wektu sing padha, lan ing paling siji saka wong-wong mau nyoba kanggo nggawe owahan, iku perlu kanggo nyedhiyani akses diselarasake saka njaba. Iki asring rampung ing beyo liyane diselarasake obyek encapsulating ing HashSet
. Yen ora ana obyek kasebut, banjur Collections.synchronizedSet()
. Iki saiki minangka cara paling apik kanggo nyegah operasi sing ora sinkron karo HashSet
.
Set s = Collections.synchronizedSet(new HashSet(...));
Konstruktor HashSet:
HashSet h = new HashSet();
- konstruktor standar. Kapasitas awal standar yaiku 16, faktor beban yaiku 0,75.HashSet h = new HashSet(int initialCapacity)
– konstruktor karo kapasitas dhisikan diwenehi. Faktor beban - 0,75.HashSet h = new HashSet(int initialCapacity, float loadFactor);
- konstruktor karo kapasitas dhisikan diwenehi lan faktor mbukak.HashSet h = new HashSet(Collection C)
- konstruktor sing nambah unsur saka koleksi liyane.
HashSet
:
import java.util.*;
class Test
{
public static void main(String[]args)
{
HashSet<String> h = new HashSet<String>();
// Add elements to the HashSet using the add() method
h.add("India");
h.add("Australia");
h.add("South Africa");
h.add("India");// try to add another same element
// Print the elements of the HashSet to the console
System.out.println(h);
System.out.println("List contains India or not:" +
h.contains("India"));
// Remove elements from the set using the remove() method
h.remove("Australia");
System.out.println("List after removing Australia:"+h);
// Loop through the elements of the HashSet using an iterator:
System.out.println("Iterating over list:");
Iterator<String> i = h.iterator();
while (i.hasNext())
System.out.println(i.next());
}
}
Kesimpulan:
[South Africa, Australia, India]
List contains India or not:true
List after removing Australia:[South Africa, India]
Iterating over list:
South Africa
India
Kabeh kelas sing ngleksanakake antarmuka Set
didhukung sacara internal dening implementasi Map
. HashSet
nyimpen unsur nggunakake HashMap
. Senajan HashMap
unsur kudu diwakili minangka pasangan kunci-nilai kanggo nambah unsur, HashSet
mung nilai sing ditambahake. Nyatane, nilai sing dilewati HashSet
minangka kunci obyek HashMap
, lan konstanta digunakake minangka nilai HashMap
. Kanthi cara iki, ing saben pasangan kunci-nilai, kabeh tombol bakal duwe nilai sing padha. Implementasi HashSet
ing java doc
:
private transient HashMap map;
// Constructor - 1
// All constructors implicitly create a HashMap object.
public HashSet()
{
// Create an implicit HashMap object
map = new HashMap();
}
// Constructor- 2
public HashSet(int initialCapacity)
{
// Create an implicit HashMap object
map = new HashMap(initialCapacity);
}
// An object of the Object class, each time acting as a value in the HashMap
private static final Object PRESENT = new Object();
Yen sampeyan ndeleng cara add()
y HashSet
:
public boolean add(E e)
{
return map.put(e, PRESENT) == null;
}
Sampeyan bisa sok dong mirsani sing cara add()
y HashSet
nelpon cara put()
ing obyek internal HashMap
, maringaken unsur kanggo ditambahake minangka tombol, lan PRESENT konstan minangka nilai. Cara kasebut dianggo kanthi cara sing padha remove()
. Iki diarani metode remove()
obyek internal HashMap
:
public boolean remove(Object o)
{
return map.remove(o) == PRESENT;
}
HashSet
adhedhasar tabel hash, lan nambah, mbusak, utawa operasi golek bakal, rata-rata, rampung ing pancet (O(1)) wektu . cara HashSet
:
boolean add(E e)
: nambah unsur kanggoHashSet
, yen ora ana, nanging yen unsur kuwi wis ana, cara ngasilake palsu .void clear():
mbusak kabeh unsur saka pesawat.boolean contains(Object o)
: Ngasilake bener yen unsur diwenehi saiki ing pesawat.boolean remove(Object o)
: Mbusak unsur diwenehi saka pesawat, yen ana.Iterator iterator()
: Ngasilake iterator kanggo unsur pesawat.boolean isEmpty()
: Ngasilake bener yen ora ana unsur ing pesawat.Object clone()
: Nindakake kloning lumahingHashSet
.
GO TO FULL VERSION