JavaRush /Blog Jawa /Random-JV /HashSet ing Jawa
渚古河
tingkat
Москва

HashSet ing Jawa

Diterbitake ing grup
Kelas HashSetngleksanakake antarmuka Set, adhedhasar tabel hash, lan uga didhukung dening conto HashMap. Amarga HashSetunsur-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. HashSet ing Jawa - 1Sawetara 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;
  • HashSetuga ngleksanakake Serializablelan Cloneable.
Kanggo njaga wektu eksekusi pancet operasi, wektu ngginakaken ing tumindak karo 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 HashSetsadurunge kapasitas mundhak kanthi otomatis. Nalika jumlah unsur HashSetdadi 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: HashSetora 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:
  1. HashSet h = new HashSet(); - konstruktor standar. Kapasitas awal standar yaiku 16, faktor beban yaiku 0,75.
  2. HashSet h = new HashSet(int initialCapacity)– konstruktor karo kapasitas dhisikan diwenehi. Faktor beban - 0,75.
  3. HashSet h = new HashSet(int initialCapacity, float loadFactor);- konstruktor karo kapasitas dhisikan diwenehi lan faktor mbukak.
  4. HashSet h = new HashSet(Collection C)- konstruktor sing nambah unsur saka koleksi liyane.
Kode ing ngisor iki nuduhake sawetara cara 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 Setdidhukung sacara internal dening implementasi Map. HashSetnyimpen unsur nggunakake HashMap. Senajan HashMapunsur kudu diwakili minangka pasangan kunci-nilai kanggo nambah unsur, HashSetmung nilai sing ditambahake. Nyatane, nilai sing dilewati HashSetminangka 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 HashSeting 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 HashSetnelpon 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;
}
HashSetadhedhasar tabel hash, lan nambah, mbusak, utawa operasi golek bakal, rata-rata, rampung ing pancet (O(1)) wektu . cara HashSet:
  1. boolean add(E e): nambah unsur kanggo HashSet, yen ora ana, nanging yen unsur kuwi wis ana, cara ngasilake palsu .
  2. void clear():mbusak kabeh unsur saka pesawat.
  3. boolean contains(Object o): Ngasilake bener yen unsur diwenehi saiki ing pesawat.
  4. boolean remove(Object o): Mbusak unsur diwenehi saka pesawat, yen ana.
  5. Iterator iterator(): Ngasilake iterator kanggo unsur pesawat.
  6. boolean isEmpty(): Ngasilake bener yen ora ana unsur ing pesawat.
  7. Object clone(): Nindakake kloning lumahing HashSet.
Javadoc: https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION