Introducere în funcția Hashing în Java
După cum știm că Java este un limbaj orientat pe obiecte, prin urmare, ar trebui să existe un mecanism care să descrie starea unui obiect, indiferent cât de mare ar fi un obiect. Funcția Hashing în Java a apărut pentru a îndeplini această cerință.
Ce este o funcție Hashing?
O funcție Hash poate fi definită ca o funcție care returnează o valoare întreagă corespunzătoare unui obiect. Funcția Hash întoarce întotdeauna aceeași valoare întreagă pentru același obiect. Valoarea integrală returnată de funcția hash se numește Hash Value. Următoarele sunt punctele importante referitoare la funcția Hash:
- Întoarce întotdeauna un număr întreg (4 octeți) pentru un obiect.
- Nu putem calcula starea obiectului din valoarea hash care este funcții hash sunt de natură ireversibilă.
- Două obiecte egale vor avea aceeași valoare de hash.
- Două obiecte inegale nu au întotdeauna valori Hash diferite.
Aplicații ale funcției Hash
Iată aplicațiile comune ale funcțiilor hash:
1. Structuri de date
Aproape fiecare limbaj de programare conține structuri de date bazate pe hash. De exemplu, java conține o tabelă Hash, Hash Map, Hash Set, Tree Set structuri de date care se bazează pe funcția Hash. La baza acestor structuri de date se află designul valorii cheie unde fiecare cheie este unică, în timp ce aceeași valoare poate exista pentru mai multe chei.
2. Digestia mesajelor
Acest algoritm este utilizat într-o verificare a integrității datelor. Acest algoritm ia un mesaj de orice lungime ca intrare și produce ca ieșire date cu lungime fixă (128 biți). Exemple de algoritmi de digerare a mesajelor includ MD2, MD4, MD5 și MD6.
3. Algoritmul Hash securizat
Acest algoritm este utilizat pentru securitatea datelor și este utilizat în aplicații și protocoale precum Secure Socket Layer (SSL). SHA-0, SHA-1, SHA-2 și SHA-3 sunt categorii comune ale algoritmului Secure Hash.
4. Verificarea și stocarea parolei
Să luăm în considerare un scenariu de conectare în care atunci când este introdusă o parolă pentru autentificarea unui utilizator, se calculează o valoare hash a parolei introduse și este trimisă prin rețea către serverul unde este stocat hașa originalului. Acest lucru se face pentru a vă asigura că nu se adulmează când o parolă este trimisă de la client către server.
5. Funcționarea compilatorului
Deoarece diferite cuvinte cheie sunt utilizate într-un limbaj de programare, pentru a face diferența între aceste cuvinte cheie și identificatori, compilatorul utilizează un set de hash care este implementat folosind un tabel hash pentru a stoca toate aceste cuvinte cheie și identificatori.
6. Algoritmul Rabin- Karp
Este un algoritm de căutare care folosește hashing pentru a căuta unul sau mai multe tipare dintr-un șir dat. Este unul dintre algoritmii cel mai des folosiți.
7. Interfețe comparabile și comparate
Aceste interfețe conțin funcții care sunt folosite pentru a compara două obiecte simultan. Valoarea de returnare a acestor funcții poate fi negativă, zero sau pozitivă pe baza dacă un obiect dat este mai mic decât, egal sau mai mare decât obiectul cu care ne comparăm. Interfața comparativă și interfețele comparabile utilizează o funcție hash pentru a compara obiecte unul de la altul.
8. Coada de prioritate
Coada de prioritate este spre deosebire de coada normală care urmează ordinea FIFO (First in First out). În coada de prioritate, elementele sunt aranjate în ordine personalizată în funcție de prioritatea lor, care este implementată intern folosind un comparator și un comparator pe care internii se bazează pe funcțiile Hash
Proiectarea funcțiilor Hash
Iată câteva principii generale de proiectare pentru crearea funcțiilor hash:
- O funcție de hash trebuie evaluată eficient.
- Valorile Hash calculate din funcțiile de hash trebuie distribuite uniform, ceea ce ajută la evitarea coliziunilor.
- Limbajul de programare Java oferă o funcție generală de hashing cu metoda hashCode () din superclasa Obiect.
public int hashCode ()(
//Logic goes here
)
Hash Colision în Java
O coliziune hash are loc atunci când două sau mai multe obiecte returnează aceeași valoare de hash. Să luăm un exemplu de hartă hash java care stochează datele în perechi cheie-valoare. Când introducem un obiect într-o hartă hash, valoarea hash a cheii este calculată și pe baza acestei locații a locației bucket value pentru a stoca obiectul valoric este găsită. Obiectele care au valori de hash diferite trebuie să intre în găleți diferite. Atunci când două sau mai multe obiecte au aceeași valoare de hash, acestea sunt stocate în aceeași locație de găleată folosind o structură de date suplimentară numită listă legată. Toate obiectele care au aceeași valoare de hash sunt înlănțuite împreună folosind o listă legată. Acest mecanism se numește înlănțuire. Urmărește modalitățile de gestionare a coliziunilor este o funcție hash:
- Înlănțuire: Așa cum este deja acoperit, ideea din spatele lanțului este de a crea o listă legată de obiecte care au aceeași valoare de hash. Înlănțuirea este o tehnică simplă, dar necesită memorie suplimentară.
- Adresare deschisă: în această tehnică, toate elementele sunt stocate într-o tabelă de hash în care fiecare intrare conține o înregistrare sau NULL. Când este căutat un element, fiecare intrare din tabelul hash este căutată pentru înregistrarea dorită până la găsirea înregistrării necesare sau se ajunge la concluzia că înregistrarea nu există în tabel.
Avantajele Hashing-ului
Următoarele sunt avantajele hașei:
- Comparați conținutul a două fișiere ușor și eficient, fără a le deschide.
- Funcțiile Hash sunt utilizate pentru verificarea integrității unui fișier.
- Cu ajutorul hashing-ului, operațiunea de căutare în structurile de date a devenit mai rapidă.
- Funcțiile Hash joacă un rol vital în securitatea datelor, deoarece majoritatea algoritmilor și protocoalelor de securitate utilizează hashing.
- Hashing-ul transformă datele într-o valoare sau cheie cu o lungime fixă mai scurtă care reprezintă șirul original care poate fi trimis prin rețea.
Dezavantaje ale Hashing-ului
În afară de avantaje, există și unele limitări ale hașei:
- Hashing-ul nu poate fi implementat pentru a sorta date.
- Nu poate fi evitată practic coliziunea hash, ceea ce la rândul său duce la ineficiență.
Articole recomandate
Acesta este un ghid pentru funcția Hashing în Java. Aici vom discuta despre aplicațiile funcției hash împreună cu avantaje și dezavantaje. De asemenea, puteți consulta următoarele articole pentru a afla mai multe -
- Declarația și inițializarea VB.Net
- Program Java care prezintă HashMap și TreeMap
- Tipuri de Hashing în DBMS
- Tehnici de Steganografie
- Schiri în programare Java
- Hashmap în Java