Masterfield

A Masterfield Oktatóközpont szakmai blogja. Minden, ami a tanfolyamokról kimaradt

Friss topikok

  • gyuria: Na végre, már nagyon vártam Már annyi téma összejött, hogy egy jó darabig biztos kitart :) (2008.10.24. 08:04) Elindultunk

Linkblog

Hogyan használjuk hatékonyan a Java Hashtable osztályát? - 2. rész

2008.12.05. 10:12 | gbujdoso | Szólj hozzá!

Címkék: java hash masterfield hashtable performancia collision rehash capacity load factor hash tábla

 

Nézzük meg a rehash() függvényt is:

/**
 * Increases the capacity of and internally reorganizes this hashtable, in
 * order to accommodate and access its entries more efficiently. This method
 * is called automatically when the number of keys in the hashtable exceeds
 * this hashtable's capacity and load factor.
 */
protected void rehash() {
    int oldCapacity = table.length;
    Entry[] oldMap = table;
    
    int newCapacity = oldCapacity * 2 + 1;
    Entry[] newMap = new Entry[newCapacity];
    
    modCount++;
    threshold = (int)(newCapacity * loadFactor);
    table = newMap;
    
    for (int i = oldCapacity ; i-- > 0 ;) {
        for (Entry<K,V> old = oldMap[i] ; old != null ; ) {
          Entry<K,V> e = old;
          old = old.next;
          int index = (e.hash & 0x7FFFFFFF) % newCapacity;
          e.next = newMap[index];
          newMap[index] = e;
        }
    }
}
Ebből is látszik, hogy a tábla kapacitásának növekedésével az ütközések valószínűsége csökken. Továbbá a rehash algoritmus időigényes és futási ideje arányoson nő az elemek számának növekedésével, ezért célszerű elkerülni a futását. Valamint fontos tudnunk, hogy az elemek törlése (remove) esetén a kapacitás nem fog csökkenni korábbi értékére.
 
Összefoglalva néhány tanács a Java Hashtable használatához:
-          jó hash algoritmussal csökkenthető az ütközések valószínűsége; ezért akár saját hatékony hashCode() függvényt is implementálhatunk
-          megfelelő kapacitást és telítettségi faktort válasszunk, hogy minél kevesebbszer fusson a rehash algoritmus, de ne foglaljunk feleslegesen memóriát túl nagy, felesleges értékek beállításával
-          a kapacitás mindig legalább 25%-kal nagyobb legyen a maximálisan tárolásra kerülő elemek számánál. Megfordítva: a tábla telítettsége ne haladja meg a 75%-ot. Ez az érték optimális elérést és megfelelő méretet jelent.
 
Tehát a Java Hashtable egy kényelmes adatszerkezet, amely könnyen használható és rugalmas. Nagy táblák tárolására azonban csak korlátozottan használható. Pontos tervezést és odafigyelést igényel használata ezekben az esetekben.

 

A bejegyzés trackback címe:

https://masterfield.blog.hu/api/trackback/id/tr92847049

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása