Hashing-funksjon i Java - Bruksområder for Hash-funksjonen

Innholdsfortegnelse:

Anonim

Introduksjon til Hashing-funksjon i Java

Ettersom vi vet at Java er et objektorientert språk, bør det derfor være en mekanisme for å beskrive tilstanden til et objekt, uansett hvor stort objekt det kan være. Hashing-funksjonen i Java kom til for å oppfylle dette kravet.

Hva er en Hashing-funksjon?

En Hash-funksjon kan defineres som en funksjon som returnerer en heltallverdi som tilsvarer et objekt. Hash-funksjon returnerer alltid den samme heltallverdien for det samme objektet. Heltalverdien som returneres av hasjfunksjonen, kalles Hash-verdi. Følgende er de viktige punktene angående Hash-funksjonen:

  • Returnerer alltid et heltall (4 byte) for et objekt.
  • Vi kan ikke beregne objekttilstand fra hasjverdien som er hasjfunksjoner som er irreversible av natur.
  • To like objekter vil ha den samme hashverdien.
  • To ulike objekter har ikke alltid forskjellige Hash-verdier.

Bruksområder for Hash-funksjonen

Her er de vanlige applikasjonene av hasjfunksjoner:

1. Datakonstruksjoner

Nesten hvert programmeringsspråk inneholder hasjbaserte datastrukturer. For eksempel inneholder java en Hash-tabell, Hash Map, Hash Set, Tree Set datastrukturer som er basert på Hash-funksjonen. Grunnlaget for disse datastrukturene er Key-Value design der hver nøkkel er unik mens den samme verdien kan eksistere for flere nøkler.

2. Melding Digest

Denne algoritmen brukes i en dataintegritetssjekk. Denne algoritmen tar en melding av hvilken som helst lengde som inngang og produserer data med fast lengde (128-bit) som utgang. Eksempler på algoritmer for melding-fordøyelse inkluderer MD2, MD4, MD5 og MD6.

3. Sikker Hash-algoritme

Denne algoritmen brukes til datasikkerhet og brukes i applikasjoner og protokoller som SSL (Secure Socket Layer). SHA-0, SHA-1, SHA-2 og SHA-3 er vanlige kategorier i Secure Hash-algoritmen.

4. Bekreftelse og lagring av passord

La oss vurdere et påloggingsscenario der når et passord legges inn for å autentisere en bruker, beregnes en hasjverdi for det angitte passordet og sendes over nettverket til serveren der hasjen til originalen er lagret. Dette gjøres for å sikre at ingen snusing gjøres når et passord sendes fra klienten til serveren.

5. Kompilatordrift

Siden forskjellige nøkkelord brukes på et programmeringsspråk, for å skille mellom disse nøkkelordene og identifikatorene, bruker kompilatoren et hashsett som implementeres ved hjelp av en hasjtabell for å lagre alle disse nøkkelordene og identifikatorene.

6. Rabin- Karp algoritme

Det er en søkealgoritme som bruker hashing for å søke etter ett eller flere mønstre i en gitt streng. Det er en av de mest brukte algoritmene.

7. Sammenlignbare og sammenliknende grensesnitt

Disse grensesnittene inneholder funksjoner som brukes til å sammenligne to objekter om gangen. Returverdien for disse funksjonene kan være negativ, null eller positiv basert på om et gitt objekt er mindre enn, lik eller større enn objektet vi sammenligner med. Internt komparator og sammenlignbare grensesnitt bruker en hasjfunksjon for å sammenligne objekter fra hverandre.

8. Prioritetskø

Prioriteringskøen er i motsetning til vanlig kø som følger FIFO (First in First out) rekkefølge. I prioriterte køelementer er elementer ordnet i tilpasset rekkefølge basert på deres prioritering, som implementeres internt ved bruk av sammenlignbar og komparator hvilke praktikanter som er basert på Hash-funksjoner.

Designe Hash-funksjoner

Her er noen generelle designprinsipper for å lage hasjfunksjoner:

  • En hasjfunksjon skal evalueres effektivt.
  • Hashverdier beregnet fra hasjfunksjoner skal fordeles jevnt, dette bidrar til å unngå kollisjoner.
  • Java-programmeringsspråket gir en generell hashingfunksjon med hashCode () -metoden i Object superklassen.

public int hashCode ()(
//Logic goes here
)

Hash Kollisjon i Java

En hasjkollisjon oppstår når to eller flere objekter returnerer den samme hasjverdien. La oss ta et eksempel på et java-hashkart som lagrer data i nøkkelverdipar. Når vi legger et objekt i et hasjkart, beregnes hasjverdien på nøkkelen og basert på dette hashverdiets bøtteplassering for å lagre verdiobjekt blir funnet. Gjenstander som har forskjellige hasjverdier, må gå i forskjellige bøtter. Når to eller flere objekter har samme hashverdi, blir de lagret på samme bøtteplassering ved å bruke en ekstra datastruktur som kalles en koblet liste. Alle objekter med samme hasjverdi blir lenket sammen ved hjelp av en lenket liste. Denne mekanismen kalles kjetting. Følgende er måtene å håndtere kollisjoner er en hasjfunksjon:

  • Kjetting: Som allerede dekket, er ideen bak kjetting å lage en koblet liste over objekter som har samme hasjverdi. Kjetting er en enkel teknikk, men krever ekstra hukommelseskostnader.
  • Åpen adressering: I denne teknikken blir alle elementene lagret i en hasjtabell der hver oppføring enten inneholder en post eller NULL. Når et element blir søkt, blir hver oppføring i hasjetabellen søkt etter ønsket post til den nødvendige posten er funnet eller det konkluderes med at posten ikke eksisterer i tabellen.

Fordeler med Hashing

Følgende er fordelene med hashing:

  1. Sammenlign innholdet i to filer enkelt og effektivt uten å åpne dem.
  2. Hash-funksjoner brukes til å sjekke integriteten til en fil.
  3. Ved hjelp av hashing har søkedriften i datastrukturer blitt raskere.
  4. Hash-funksjoner spiller en viktig rolle i datasikkerhet ettersom de fleste av sikkerhetsalgoritmer og protokoller benytter seg av hashing.
  5. Hashing konverterer data til en kortere verdi eller nøkkel i fast lengde som representerer den opprinnelige strengen som kan sendes over nettverket.

Ulemper ved Hashing

Bortsett fra fordeler, er det også noen begrensninger med hasling:

  1. Hashing kan ikke implementeres for å sortere data.
  2. Hasjkollisjonen kan ikke praktisk unngås, noe som igjen fører til ineffektivitet.

Anbefalte artikler

Dette er en guide til Hashing-funksjon i Java. Her diskuterer vi anvendelser av hasjfunksjon sammen med fordeler og ulemper. Du kan også se på følgende artikler for å lære mer -

  1. Erklæring og initialisering av VB.Net
  2. Java-program som viser HashMap og TreeMap
  3. Typer Hashing i DBMS
  4. Steganografiteknikker
  5. Arrays i Java-programmering
  6. Hashmap i Java