JavaRush /Java Blog /Random-TK /Java-da HashSet
渚古河
Dereje
Москва

Java-da HashSet

Toparda çap edildi
Synp HashSetinterfeýsi amala aşyrýar Set, hash tablisasyna esaslanýar we mysal bilen goldanýar HashMap. Elementler sargyt edilmänsoň HashSet, elementleriň belli bir wagtdan soň şol bir tertipde boljakdygyna kepillik ýok. Goşmak, pozmak we gözlemek amallary hash funksiýasynyň elementleri “çeleklere” dogry paýlamagy şerti bilen yzygiderli ýerine ýetiriler, soňrak ara alnyp maslahatlaşylar. Java-da HashSet - 1Bu barada birnäçe möhüm pikir HashSet:
  • Sebäbi synp interfeýsi amala aşyrýar Set, diňe üýtgeşik gymmatlyklary saklap bilýär;
  • NULL bahalaryny saklap bilýär;
  • Elementleriň goşulýan tertibi hash kody bilen hasaplanýar;
  • HashSethem ýerine Serializableýetirýär Cloneable.
Amallaryň yzygiderli ýerine ýetiriliş wagtyny saklamak üçin, hereketlere sarp edilen wagt , gurlan mysaldaky “kuwwat” HashSetelementleriň sanyna (“sebetleriň” sanyna) göni proporsional bolmalydyr. Şonuň üçin öndürijiligi saklamak üçin başlangyç kuwwaty gaty ýokary (ýa-da ýük faktoryny gaty pes) goýmazlyk möhümdir. Başlangyç kuwwaty - hash tablisasyndaky öýjükleriň başlangyç sany (“gaplar”). Cellshli öýjükler doldurylsa, olaryň sany awtomatiki köpeler. Factorük faktory , kuwwatynyň awtomatiki ýokarlanmanka näderejede doly bolup biljekdiginiň ölçegidir . Haçan-da elementleriň sany başlangyç kuwwatyň we ýük faktorynyň önüminden has köp bolanda, hash tablisasy täzeden ýuwulýar (elementleriň hash kodlary täzeden hasaplanýar we alnan bahalara görä tablisa täzeden gurulýar) we san içindäki öýjükler iki esse köpelýär. Factorük faktory = Tablisa / hash tablisasynyň ululygynda saklanýan elementleriň sany Mysal üçin, tablisadaky öýjükleriň başlangyç sany 16, ýük faktory bolsa 0,75 bolsa, doldurylan öýjükleriň sany 12-e ýetende, öýjükleriň sany awtomatiki köpeler. Factorük faktory we başlangyç kuwwat öndürijilige täsir edýän iki esasy faktor . 0.75 ýük faktory ortaça gowy öndürijiligi üpjün edýär. Bu parametr köpeldilse, ýadyň ýüki azalar (sebäbi täzeden ýuwmagyň we täzeden gurmagyň sany azalýar), ýöne bu goşmak we gözlemek amallaryna täsir eder. Gaýtadan ýuwmak üçin sarp edilen wagty azaltmak üçin dogry başlangyç parametrini saýlamaly. Başlangyç kuwwaty ýük faktoryna bölünen elementleriň iň köp mukdaryndan köp bolsa, düýbünden ýuwmak amallary bolmaz. HashSetHashMapHashSetHashSetHashSetMöhüm: HashSetiçerki sinhronizasiýa bilen maglumat gurluşy däl, şonuň üçin bir wagtyň özünde birnäçe sapak üstünde işleýän bolsa we iň bolmanda biri üýtgeşme girizjek bolsa, daşardan sinhron girişi üpjün etmeli. Bu köplenç başga bir sinhronlaşdyrylan obýektiň hasabyna amala aşyrylýar HashSet. Şeýle obýekt ýok bolsa, onda Collections.synchronizedSet(). Bu häzirki wagtda sinhron däl amallaryň öňüni almagyň iň oňat usulydyr HashSet.
Set s = Collections.synchronizedSet(new HashSet(...));
HashSet konstruktorlary:
  1. HashSet h = new HashSet(); - deslapky konstruktor. Adaty başlangyç kuwwat 16, ýük faktory 0,75.
  2. HashSet h = new HashSet(int initialCapacity)- berlen başlangyç kuwwatly konstruktor. Factorük faktory - 0.75.
  3. HashSet h = new HashSet(int initialCapacity, float loadFactor);- berlen başlangyç kuwwaty we ýük faktory bolan konstruktor.
  4. HashSet h = new HashSet(Collection C)- başga ýygyndydan elementleri goşýan konstruktor.
Aşakdaky kod käbir usullary görkezýär 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());
    }
}
Netije:
[South Africa, Australia, India]
List contains India or not:true
List after removing Australia:[South Africa, India]
Iterating over list:
South Africa
India
Interfeýsi amala aşyrýan ähli synplar Setiçerki amallar bilen goldanýar Map. HashSetulanýan elementleri saklaýar HashMap. HashMapBir element goşmak üçin esasy element jübüti hökmünde görkezilmeli bolsa-da , HashSetdiňe baha goşulýar. Aslynda, geçýän baha HashSetobýektiň açarydyr HashMapwe hemişelik baha hökmünde ulanylýar HashMap. Şeýlelik bilen, her açar bahasy jübütinde ähli düwmeleriň bahasy deň bolar. Durmuşa geçirmek :HashSetjava 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();
add()Y usulyna seretseňiz HashSet:
public boolean add(E e)
{
   return map.put(e, PRESENT) == null;
}
add()Y usulynyň içerki obýektdäki HashSetusuly , açar hökmünde goşuljak elementi we PRESENT hemişelik bahasy hökmünde çagyrýandygyny görüp bilersiňiz . Usul hem edil şonuň ýaly işleýär . Içerki obýekt usuly diýilýär : put()HashMapremove()remove()HashMap
public boolean remove(Object o)
{
  return map.remove(o) == PRESENT;
}
HashSethash tablisasyna esaslanýar we goşmak, aýyrmak ýa-da gözlemek amallary ortaça hemişelik (O (1)) wagtda tamamlanar . Usullar HashSet:
  1. boolean add(E e)HashSet: ýok bolsa bir element goşýar , ýöne şeýle element eýýäm bar bolsa, usul ýalňyş gaýdyp gelýär .
  2. void clear():toplumdan ähli elementleri aýyrýar.
  3. boolean contains(Object o): Berlen element toplumda bar bolsa hakyky bolýar.
  4. boolean remove(Object o): Eger bar bolsa, berlen elementi toplumdan aýyrýar.
  5. Iterator iterator(): Toplumyň elementleri üçin iterator görkezýär.
  6. boolean isEmpty(): Toplumda elementler ýok bolsa hakyky bolýar.
  7. Object clone(): Surfaceerüsti klonirlemäni ýerine ýetirýär HashSet.
Javadoc: https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION