Úvod do funkce hashování v Javě
Protože víme, že Java je objektově orientovaný jazyk, měl by existovat mechanismus popisující stav objektu, bez ohledu na to, jak velký může být objekt. Hashing Function in Java vznikl, aby splnil tento požadavek.
Co je to hasící funkce?
Hašovací funkce může být definována jako funkce, která vrací celočíselnou hodnotu odpovídající objektu. Hash Function vždy vrací stejnou hodnotu pro stejný objekt. Celá hodnota vrácená hašovací funkcí se nazývá Hash Value. Níže jsou uvedeny důležité body týkající se funkce Hash:
- Vždy vrátí celé číslo (4 bajty) pro objekt.
- Nemůžeme vypočítat stav objektu z hašované hodnoty, protože hash funkce jsou ve své podstatě nevratné.
- Dva stejné objekty budou mít stejnou hodnotu hash.
- Dva nerovné objekty nemají vždy různé hodnoty Hash.
Aplikace hašovací funkce
Zde jsou běžné aplikace hash funkcí:
1. Datové struktury
Téměř každý programovací jazyk obsahuje datové struktury založené na hašiši. Například java obsahuje tabulku Hash, Hash Map, Hash Set, Tree Set datové struktury, které jsou založeny na Hash funkci. Základem těchto datových struktur je design klíč-hodnota, kde každý klíč je jedinečný, zatímco stejná hodnota může existovat pro více klíčů.
2. Přehled zpráv
Tento algoritmus se používá při kontrole integrity dat. Tento algoritmus bere jako vstup zprávu s libovolnou délkou a produkuje jako výstup data s pevnou délkou (128 bitů). Příklady algoritmů pro výtah zpráv zahrnují MD2, MD4, MD5 a MD6.
3. Bezpečný algoritmus hashování
Tento algoritmus se používá pro zabezpečení dat a používá se v aplikacích a protokolech, jako je Secure Socket Layer (SSL). SHA-0, SHA-1, SHA-2 a SHA-3 jsou běžné kategorie algoritmu Secure Hash Algorithm.
4. Ověření a uložení hesla
Podívejme se na přihlašovací scénář, ve kterém je při zadání hesla k ověření uživatele vypočítána hashova hodnota zadaného hesla a je odeslána přes síť na server, kde je uložen hash originálu. To se provádí, aby se zajistilo, že se nebude provádět šňupání, když je heslo odesláno z klienta na server.
5. Provoz kompilátoru
Protože jsou v programovacím jazyce používána různá klíčová slova, aby bylo možné rozlišovat mezi těmito klíčovými slovy a identifikátory, kompilátor používá hashovou sadu, která je implementována pomocí hashovací tabulky pro uložení všech těchto klíčových slov a identifikátorů.
6. Algoritmus Rabina-Karpa
Je to vyhledávací algoritmus, který využívá hashování k hledání jednoho nebo více vzorů v daném řetězci. Je to jeden z nejčastěji používaných algoritmů.
7. Srovnatelné a srovnávací rozhraní
Tato rozhraní obsahují funkce, které se používají k porovnání dvou objektů najednou. Návratová hodnota těchto funkcí může být záporná, nulová nebo kladná na základě toho, zda je daný objekt menší než, rovný nebo větší než objekt, se kterým porovnáváme. Interně komparátor a srovnatelná rozhraní používají hash funkci k porovnání objektů od sebe navzájem.
8. Fronta priorit
Fronta priorit je na rozdíl od normální fronty, která následuje pořadí FIFO (First in First out). V frontě prioritních prvků jsou prvky uspořádány v zakázkovém pořadí na základě jejich priority, která je interně implementována pomocí srovnatelného a komparátoru, které stážisté jsou založeny na Hash funkcích.
Navrhování funkcí hash
Zde jsou některé obecné zásady návrhu pro vytváření hash funkcí:
- Hashova funkce by měla být efektivně vyhodnocena.
- Hodnoty hash vypočítané z hašovacích funkcí by měly být rovnoměrně rozloženy, což pomáhá zabránit kolizím.
- Programovací jazyk Java poskytuje obecnou hašovací funkci s metodou hashCode () v třídě Object.
public int hashCode ()(
//Logic goes here
)
Hash Collision v Javě
Ke kolizi hash dojde, když dva nebo více objektů vrátí stejnou hodnotu hash. Vezměme si příklad java hashové mapy, která ukládá data do párů klíč-hodnota. Když vložíme objekt do hašovací mapy, vypočítá se hašovací hodnota klíče a na základě tohoto umístění kbelíku hašovací hodnoty se najde objekt hodnoty. Objekty mající různé hodnoty hash musí jít do různých kbelíků. Když dva nebo více objektů mají stejnou hodnotu hash, jsou uloženy ve stejném umístění v kbelíku pomocí další datové struktury nazývané propojený seznam. Všechny objekty, které mají stejnou hodnotu hash, jsou zřetězeny dohromady pomocí propojeného seznamu. Tento mechanismus se nazývá řetězení. Následují způsoby, jak zvládnout kolize, je hashovací funkce:
- Řetězení: Jak již bylo uvedeno, myšlenkou zřetězení je vytvořit propojený seznam objektů, které mají stejnou hodnotu hash. Řetězování je jednoduchá technika, ale vyžaduje další režii paměti.
- Otevřené adresování: V této technice jsou všechny prvky uloženy v hašovací tabulce, ve které každá položka obsahuje záznam nebo NULL. Když je hledán element, je každý záznam v hašovací tabulce hledán pro požadovaný záznam, dokud není nalezen požadovaný záznam nebo není vyvozeno, že záznam v tabulce neexistuje.
Výhody Hashing
Výhody hašování jsou následující:
- Porovnejte obsah dvou souborů snadno a efektivně, aniž byste je museli otevírat.
- Hašovací funkce se používají ke kontrole integrity souboru.
- S pomocí hashování se operace vyhledávání v datových strukturách zrychlila.
- Hašovací funkce hrají zásadní roli v zabezpečení dat, protože většina bezpečnostních algoritmů a protokolů využívá hašování.
- Hashing převádí data na kratší pevnou délku nebo klíč, který představuje původní řetězec, který lze odeslat přes síť.
Nevýhody Hašování
Kromě výhod existují i omezení hashování:
- Hashing nelze implementovat pro třídění dat.
- Kolize hashe nelze prakticky vyhnout, což zase vede k neefektivnosti.
Doporučené články
Toto je průvodce funkcí Hashing v Javě. Zde diskutujeme aplikace hašovací funkce spolu s výhodami a nevýhodami. Další informace naleznete také v následujících článcích -
- Prohlášení a inicializace VB.Net
- Program Java zobrazující HashMap a TreeMap
- Typy hašování v DBMS
- Techniky steganografie
- Pole v programování Java
- Hashmap v Javě