Kérdések az interjú
Először is egy HashMap. HashMap - egy asszociatív tömb. Röviden, egy asszociatív tömb - egy adatstruktúrát, amely tárolja a kulcs-érték pár.
Hogy könnyebb megérteni, hogy mi is ez, leírható, mint egy HashMap számozott kosár tároló néhány adat (1.). Amikor hozzáad egy új elemet a HashMap. Mi amellett, hogy a tárgy jut is fontos, hogy a jövőben lehetséges lesz, hogy megtalálja.
Ami a legfontosabb, akkor meg a helyzetét a kívánt tárgyat? Ehhez tudnunk kell, hogy kivonat, gombot. Honnan származik? Egészen egyszerűen, ha megértjük, hogy a kulcs lehet bármilyen tárgy java. Mindenki tudja, hogy az Object osztály hajtja végre a kivonat, () metódust, ami azt jelenti, hogy nem lesz örökölt vagy felülírható a „kulcs”. mert minden java örökölt az Object osztályban. Most már egyértelmű, ahonnan a kulcsot vett kivonat,!
Egyszer HashMap. Én átadta a kulcsot + elmenti az objektumot, egy speciális hash-függvény kiszámítja a kosarat, amelyben folytatni adatainkat.
El tudod képzelni, de nincsenek kosarak egy HashMap -e nincs. Ehelyett van egy tömb, amely tárolja a kapcsolatokat a hasonló listák tárolására adatainkat. Minden elem a tömb megfelel egy listát.
Ez a kérdés soha nem kérdeztem, megtaláltam ügyéről. Válasz - 16. De mint ArrayList-ik a tervező, akkor adjon meg egy másik számot.
Ez a kérdés is ugyanolyan gyakori. Egy ütközés, amikor két különböző tárgyak esnek egy kosárba (a láncolt lista). Ennek az az oka, hogy ugyanaz a kivonat,. Ahhoz, hogy hatékonyabban tudjon együttműködni HashMap, kivonat, nem kell megismételni a tárgyak nem egyenértékű.
Amint azt már említettük, az adatokat tárolja a listákban. Miért? Miért nem tárolja csak egy tárgy? A válasz egyszerű. Ez azért van, mert ez egy módja annak, hogy megoldja ütközések. Hogyan működik hozzáadásával? Vélemény Kód 1
- Először - kiderítjük, mi a kosár felel meg a legfontosabb célja. Ezután ellenőrizze, hogy van már néhány tárgyat, ha nem -, majd hozzáadjuk a jelenlegi. Ha igen, akkor ez ütközés történt.
- Aztán össze a kulcsot, és kivonat, az objektum és az, hogy a belső (kivéve persze, hogy több is van).
- Először ellenőrizze, hogy a kivonat, egyenlő kulcsokat.
- Ha igen, összehasonlítani fő módszere megegyezik.
- Ha egyenlő visszatér igaz, a gombok azonos az „érték” és kivonat, - helyett, az új objektum helyettesíti az egyik, hogy már van ugyanolyan kulcs,
- Ha kivonat, és az „érték” nem egyenlő gomb - egy új objektumot adunk az a lista végére.
HashMap van loadFactor területen. Azt be lehet állítani keresztül a kivitelező. Az alapértelmezett 0.75. Miért van erre szükség? Munkája száma kosarak ad nekünk a szükséges számú objektumok hozzáadását kétszer annyi tartott kosarakat. Például, ha azt MAPK 16 kosarak és loadFactor egyenlő 0,75, akkor a bővítmény fog történni, ha hozzáadjuk a 16 * 0,75 = 12 tárgyat. MAPK megduplázódott.
Tekintsük először azt az esetet, amelyben nincsenek ütközések. Ebben az esetben, továbbá, törlés és keresés a tárgyakat a kulcs végre konstans O (1). Persze, hogy nem veszi figyelembe a meghosszabbítása esetén az elemek száma. Általánosságban elmondható, hogy ha dolgozik egy HashMap, akkor jobb, ha meghatározza a kivitelező, hány kosarat meg kell, hogy jól működik, és ha ez egyenlő a számos egyedi tárgyak, amelyek akkor dolgozik. Ebben az esetben nem kell időt és erőforrásokat, hogy új HashMap kétszer száma vödör-s. Miért ilyen jó teljesítményt? Minden egyszerű. Ismétlem, hogy nincs összeütközés - ebben az esetben nincs függés más elemeinek a MAPK. Törlés, helyezze a keresés végrehajtása körülbelül ugyanazt a rendszert. Vegye kivonat, kulcs kiszámításra kosarat, és tette a törlés, beszúrás vagy keresését. Mindent! Talált más tárgyakat. De ez csak abban az esetben, ha nincsenek ütközések.
Most beszéljünk arról az esetről, amikor a konfliktus még mindig jelen van. Elméletileg dolgozik HashMap ahol ütközés lehet jelen, megkapjuk időbonyolultsága O (log (n)) beszúrni, törölni, és megment. A legrosszabb esetben, ha az összes tárgyat vissza ugyanazt kivonat, és így esnek ugyanabba a kosárba. Ez valójában egy láncolt lista, majd az idő összetettségét, mint láncolt lista O (n).
Ez minden. Sok szerencsét.
Ahhoz, hogy megértsük, mi az a személy, igazán tudja, hogyan működik. Ez hogyan HashMap kell ismerniük, és nem azért, mert felkérték az interjúban.
Tudja, hogyan rabotvet HashMap. A programozó tudnia kell. Mi a Map interfész. És hogy ez a felület által megvalósított Sun / Oracle - ez csak egy érdekesség. Vannak sok implementációja Map interfész (Google, Apache, stb), és hogy szükség van, hogy lakjanak, hogy a belső, ami az Oracle? Sokkal fontosabb az a programozó tudja, hogy végül végrehajtására használják natív módszereket. És sokan úgy vélik, hogy java tömböket használnak. És bármi Oracle épít néhány belső szerkezete nem fontos.