Introduktion til Hashing-funktion i Java
Da vi ved, at Java er et objektorienteret sprog, bør der derfor være en mekanisme til at beskrive et objekts tilstand, uanset hvor stort et objekt kan være. Hashing-funktion i Java kom til at opfylde dette krav.
Hvad er en Hashing-funktion?
En Hash-funktion kan defineres som en funktion, der returnerer en heltalværdi svarende til et objekt. Hash-funktion returnerer altid den samme heltalværdi for det samme objekt. Den heltalværdi, der returneres af hashfunktionen kaldes Hash-værdi. Følgende er de vigtige punkter vedrørende Hash-funktionen:
- Returnerer altid et heltal (4 byte) for et objekt.
- Vi kan ikke beregne objekttilstand fra den hashværdi, som er hashfunktioner, som er irreversible.
- To lige objekter har den samme hashværdi.
- To ulige objekter har ikke altid forskellige Hash-værdier.
Anvendelser af Hash-funktion
Her er de almindelige applikationer af hashfunktioner:
1. Datakonstruktioner
Næsten hvert programmeringssprog indeholder hash-baserede datastrukturer. For eksempel indeholder java en Hash-tabel, Hash Map, Hash Set, Tree Set datastrukturer, der er baseret på Hash-funktion. Grundlaget for disse datastrukturer er design af nøgleværdier, hvor hver nøgle er unik, mens den samme værdi kan eksistere for flere nøgler.
2. Message Digest
Denne algoritme bruges i en dataintegritetskontrol. Denne algoritme tager en meddelelse om enhver længde som input og producerer en fast længde (128-bit) data som output. Eksempler på meddelelsesfordøjelsesalgoritmer inkluderer MD2, MD4, MD5 og MD6.
3. Sikker Hash-algoritme
Denne algoritme bruges til datasikkerhed og bruges i applikationer og protokoller som Secure Socket Layer (SSL). SHA-0, SHA-1, SHA-2 og SHA-3 er almindelige kategorier i Secure Hash-algoritmen.
4. Bekræftelse og opbevaring af adgangskode
Lad os overveje et login-scenarie, hvor en hashværdi af den indtastede adgangskode beregnes, når en adgangskode indtastes til at autentificere en bruger, og sendes over netværket til den server, hvor originalen hash er gemt. Dette gøres for at sikre, at der ikke udføres sniffning, når der sendes en adgangskode fra klienten til serveren.
5. Compiler-betjening
Da forskellige nøgleord bruges i et programmeringssprog, for at skelne mellem disse nøgleord og identifikatorer, bruger compileren et hash-sæt, der implementeres ved hjælp af en hash-tabel til at gemme alle disse nøgleord og identifikatorer.
6. Rabin- Karp algoritme
Det er en søgealgoritme, der bruger hashing til at søge efter et eller flere mønstre i en given streng. Det er en af de mest almindeligt anvendte algoritmer.
7. Sammenlignelige og sammenligningsgrænseflader
Disse grænseflader indeholder funktioner, der bruges til at sammenligne to objekter ad gangen. Returneringsværdien af disse funktioner kan være negativ, nul eller positiv baseret på, om et givet objekt er mindre end, lig med eller større end det objekt, vi sammenligner med. Intern komparator og sammenlignelige grænseflader bruger en hash-funktion til at sammenligne objekter fra hinanden.
8. Prioritetskø
Prioriteringskøen er i modsætning til normal kø, der følger FIFO (First in First out) rækkefølge. I prioriterede køer er elementer arrangeret i brugerdefineret rækkefølge baseret på deres prioritet, som implementeres internt ved hjælp af sammenlignelig og komparator, hvilke praktikanter der er baseret på Hash-funktioner.
Design af Hash-funktioner
Her er nogle generelle designprincipper for oprettelse af hashfunktioner:
- En hash-funktion skal evalueres effektivt.
- Hash-værdier beregnet fra hashfunktioner skal fordeles ens, dette hjælper med at undgå kollisioner.
- Java-programmeringssprog giver en generel hashing-funktion med hashCode () -metoden i Object-superklassen.
public int hashCode ()(
//Logic goes here
)
Hash-kollision i Java
En hash-kollision opstår, når to eller flere objekter returnerer den samme hashværdi. Lad os tage et eksempel på et java-hashkort, der gemmer data i nøgleværdipar. Når vi lægger et objekt på et hashkort, beregnes hashværdien af nøglen, og baseret på denne hashværdi skovlplacering for at gemme værdiobjekt findes. Objekter med forskellige hashværdier skal gå i forskellige spande. Når to eller flere objekter har den samme hashværdi, gemmes de i den samme spandplacering ved hjælp af en ekstra datastruktur kaldet en sammenkoblet liste. Alle objekter med den samme hashværdi er kædet sammen ved hjælp af en linket liste. Denne mekanisme kaldes chaining. Følgende er måderne til at håndtere kollisioner på er en hash-funktion:
- Chaining: Som allerede dækket, er tanken bag chaining at oprette en sammenkoblet liste over objekter med samme hashværdi. Chaining er en enkel teknik, men kræver ekstra hukommelsesomkostninger.
- Åben adressering: I denne teknik gemmes alle elementer i en hash-tabel, hvor hver post enten indeholder en post eller NULL. Når der søges efter et element, søges hver post i hash-tabellen efter den ønskede post, indtil den krævede post findes, eller det konkluderes, at posten ikke findes i tabellen.
Fordele ved Hashing
Følgende er fordelene ved hashing:
- Sammenlign indholdet i to filer let og effektivt uden at åbne dem.
- Hash-funktioner bruges til at kontrollere en fils integritet.
- Ved hjælp af hashing er søgefunktionen i datastrukturer blevet hurtigere.
- Hash-funktioner spiller en vigtig rolle i datasikkerhed, da de fleste af sikkerhedsalgoritmer og protokoller bruger hashing.
- Hashing konverterer data til en kortere fast længde eller nøgle, der repræsenterer den originale streng, der kan sendes over netværket.
Ulemper ved Hashing
Bortset fra fordele er der også nogle begrænsninger af hashing:
- Hashing kan ikke implementeres for at sortere data.
- Hash-kollisionen kan ikke undgås praktisk, hvilket igen fører til ineffektivitet.
Anbefalede artikler
Dette er en guide til Hashing-funktion i Java. Her diskuterer vi anvendelser af hash-funktion sammen med fordele og ulemper. Du kan også se på de følgende artikler for at lære mere -
- Erklæring og initialisering af VB.Net
- Java-program viser HashMap og TreeMap
- Typer af Hashing i DBMS
- Steganografiteknikker
- Arrays i Java-programmering
- Hashmap i Java