Introduktion till Hashing-funktion i Java
Som vi vet att Java är ett objektorienterat språk bör det därför finnas en mekanism för att beskriva ett objekts tillstånd, oavsett hur stort ett objekt kan vara. Hashing-funktionen i Java kom till för att uppfylla detta krav.
Vad är en Hashing-funktion?
En Hash-funktion kan definieras som en funktion som returnerar ett heltal som motsvarar ett objekt. Hash-funktionen returnerar alltid samma heltal för samma objekt. Det heltal som returneras av hashfunktionen kallas Hash-värde. Följande är de viktiga punkterna angående Hash-funktionen:
- Returnerar alltid ett heltal (4 byte) för ett objekt.
- Vi kan inte beräkna objekttillstånd utifrån hashvärdet som är hashfunktioner som är irreversibla till sin natur.
- Två lika objekt har samma hashvärde.
- Två ojämna objekt har inte alltid olika Hash-värden.
Användningar av Hash-funktionen
Här är de vanliga applikationerna för hashfunktioner:
1. Datakonstruktioner
Nästan varje programmeringsspråk innehåller hash-baserade datastrukturer. Till exempel innehåller java en Hash-tabell, Hash Map, Hash Set, Tree Set datastrukturer som är baserade på Hash-funktionen. Grunden för dessa datastrukturer är Key-Value-design där varje nyckel är unik medan samma värde kan existera för flera nycklar.
2. Meddelande Digest
Denna algoritm används i en dataintegritetskontroll. Denna algoritm tar ett meddelande med vilken längd som helst som ingång och producerar en fast längd (128-bitars) data som utgång. Exempel på algoritmer för meddelandets digerering inkluderar MD2, MD4, MD5 och MD6.
3. Säker Hash-algoritm
Denna algoritm används för datasäkerhet och används i applikationer och protokoll som SSL (Secure Socket Layer). SHA-0, SHA-1, SHA-2 och SHA-3 är vanliga kategorier i Secure Hash-algoritmen.
4. Verifiering och lagring av lösenord
Låt oss överväga ett inloggningsscenario där ett lösenord anges för att verifiera en användare, ett hashvärde för det angivna lösenordet beräknas och skickas över nätverket till servern där originalets hash lagras. Detta görs för att säkerställa att ingen sniffning görs när ett lösenord skickas från klienten till servern.
5. Kompilatordrift
Eftersom olika nyckelord används på ett programmeringsspråk, för att skilja mellan dessa nyckelord och identifierare, använder kompilatorn en hashuppsättning som implementeras med en hashtabell för att lagra alla dessa nyckelord och identifierare.
6. Rabin- Karp algoritm
Det är en sökalgoritm som använder hashing för att söka efter ett eller flera mönster i en given sträng. Det är en av de mest använda algoritmerna.
7. Jämförbara och jämförande gränssnitt
Dessa gränssnitt innehåller funktioner som används för att jämföra två objekt i taget. Returvärdet för dessa funktioner kan vara negativt, noll eller positivt baserat på om ett givet objekt är mindre än, lika med eller större än det objekt vi jämför. Internt komparator och jämförbara gränssnitt använder en hash-funktion för att jämföra objekt från varandra.
8. Prioritetskö
Prioriteringskön är till skillnad från normal kö som följer FIFO (First in First out) ordning. I prioriterade köer är element anordnade i anpassad ordning baserat på deras prioritering, som implementeras internt med jämförbar och komparator vilken praktikanter baseras på Hash-funktioner.
Designa Hash-funktioner
Här är några allmänna designprinciper för att skapa hash-funktioner:
- En hashfunktion ska utvärderas effektivt.
- Hashvärden som beräknas från hashfunktioner bör fördelas jämnt, detta hjälper till att undvika kollisioner.
- Java-programmeringsspråket ger en allmän hashingfunktion med metoden hashCode () i objektets superklass.
public int hashCode ()(
//Logic goes here
)
Hash Kollision i Java
En hashkollision inträffar när två eller flera objekt returnerar samma hashvärde. Låt oss ta ett exempel på en java-hashkarta som lagrar data i nyckelvärdespar. När vi lägger ett objekt i en hashkarta beräknas hashvärdet för nyckeln och baseras på denna hashvärdeshinkplats för att lagra värdeobjekt hittas. Objekt med olika hashvärden måste gå in i olika hinkar. När två eller flera objekt har samma hashvärde lagras de i samma skopplats med hjälp av en ytterligare datastruktur som kallas en länkad lista. Alla objekt med samma hashvärde är kedjade med hjälp av en länkad lista. Denna mekanism kallas kedja. Följande är sätten att hantera kollisioner är en hash-funktion:
- Kedja: Som redan täckt är tanken bakom kedjan att skapa en länkad lista med objekt med samma hashvärde. Kedja är en enkel teknik men kräver ytterligare minneskostnader.
- Öppen adressering: I denna teknik lagras alla element i en hashtabell där varje post innehåller antingen en post eller NULL. När man söker efter ett element söks varje post i hashtabellen efter önskad post tills den önskade posten hittas eller slutsatsen är att posten inte finns i tabellen.
Fördelar med Hashing
Följande är fördelarna med hasning:
- Jämför innehållet i två filer enkelt och effektivt utan att öppna dem.
- Hash-funktioner används för att kontrollera en fils integritet.
- Med hjälp av hashing har sökoperationen i datastrukturer blivit snabbare.
- Hashfunktioner spelar en viktig roll i datasäkerhet eftersom de flesta av säkerhetsalgoritmerna och protokollen använder hashing.
- Hashing konverterar data till ett kortare eller nyckel med fast längd som representerar den ursprungliga strängen som kan skickas över nätverket.
Nackdelar med Hashing
Bortsett från fördelar finns det också några begränsningar av hasning:
- Hashing kan inte implementeras för att sortera data.
- Hasskollisionen kan inte praktiskt undvikas vilket i sin tur leder till ineffektivitet.
Rekommenderade artiklar
Detta är en guide till Hashing-funktionen i Java. Här diskuterar vi applikationer av hashfunktion tillsammans med fördelar och nackdelar. Du kan också titta på följande artiklar för att lära dig mer -
- Förklaring och initiering av VB.Net
- Java-program som visar HashMap och TreeMap
- Typer av Hashing i DBMS
- Steganografitekniker
- Arrays i Java-programmering
- Hashmap i Java