Inleiding tot de hashfunctie in Java
Omdat we weten dat Java een objectgeoriënteerde taal is, moet er daarom een mechanisme zijn om de status van een object te beschrijven, ongeacht hoe groot een object is. Hashing Function in Java is ontstaan om aan deze vereiste te voldoen.
Wat is een hashfunctie?
Een hashfunctie kan worden gedefinieerd als een functie die een geheel getal retourneert dat overeenkomt met een object. Hash-functie retourneert altijd dezelfde gehele waarde voor hetzelfde object. De gehele waarde die wordt geretourneerd door de hashfunctie, wordt hashwaarde genoemd. Hier volgen de belangrijke punten met betrekking tot de hashfunctie:
- Retourneert altijd een geheel getal (4 bytes) voor een object.
- We kunnen de objectstatus niet berekenen met de hash-waarde, namelijk dat hash-functies onomkeerbaar van aard zijn.
- Twee gelijke objecten hebben dezelfde hashwaarde.
- Twee ongelijke objecten hebben niet altijd verschillende Hash-waarden.
Toepassingen van de hashfunctie
Hier zijn de algemene toepassingen van hash-functies:
1. Gegevensstructuren
Bijna elke programmeertaal bevat op hash gebaseerde gegevensstructuren. Java bevat bijvoorbeeld een Hash-tabel, Hash Map, Hash Set, Tree Set-gegevensstructuren die zijn gebaseerd op de Hash-functie. De basis van deze gegevensstructuren is Key-Value-ontwerp waarbij elke sleutel uniek is, terwijl dezelfde waarde voor meerdere sleutels kan bestaan.
2. Berichtenoverzicht
Dit algoritme wordt gebruikt bij een controle van de gegevensintegriteit. Dit algoritme neemt een bericht van elke lengte als invoer en produceert gegevens met een vaste lengte (128-bit) als uitvoer. Voorbeelden van de algoritmen voor het verwerken van berichten zijn MD2, MD4, MD5 en MD6.
3. Veilig Hash-algoritme
Dit algoritme wordt gebruikt voor gegevensbeveiliging en wordt gebruikt in applicaties en protocollen zoals Secure Socket Layer (SSL). SHA-0, SHA-1, SHA-2 en SHA-3 zijn veel voorkomende categorieën van het Secure Hash-algoritme.
4. Wachtwoordverificatie en opslag
Laten we een inlogscenario overwegen waarin, wanneer een wachtwoord wordt ingevoerd om een gebruiker te verifiëren, een hash-waarde van het ingevoerde wachtwoord wordt berekend en via het netwerk wordt verzonden naar de server waar de hash van het origineel wordt opgeslagen. Dit wordt gedaan om ervoor te zorgen dat er niet wordt gesnoven wanneer een wachtwoord van de client naar de server wordt verzonden.
5. Werking van de compiler
Aangezien verschillende sleutelwoorden worden gebruikt in een programmeertaal, maakt de compiler om een onderscheid te maken tussen deze sleutelwoorden en identificatiegegevens een hashset die wordt geïmplementeerd met behulp van een hashtabel om al deze sleutelwoorden en identificatiegegevens op te slaan.
6. Rabin- Karp-algoritme
Het is een zoekalgoritme dat gebruik maakt van hashing om naar een of meer patronen in een bepaalde string te zoeken. Het is een van de meest gebruikte algoritmen.
7. Vergelijkbare en vergelijkende interfaces
Deze interfaces bevatten functies die worden gebruikt om twee objecten tegelijk te vergelijken. De retourwaarde van deze functies kan negatief, nul of positief zijn op basis van het feit of een bepaald object kleiner is dan, gelijk aan of groter dan het object waarmee we vergelijken. Intern vergelijker en vergelijkbare interfaces gebruiken een hashfunctie om objecten van elkaar te vergelijken.
8. Prioriteitswachtrij
De prioriteitswachtrij is anders dan de normale wachtrij die volgt op de FIFO-volgorde (First in First out). In de wachtrij met prioriteit worden elementen in aangepaste volgorde gerangschikt op basis van hun prioriteit, die intern wordt geïmplementeerd met behulp van vergelijkbare en comparator welke stagiaires zijn gebaseerd op hashfuncties.
Hash-functies ontwerpen
Hier zijn enkele algemene ontwerpprincipes voor het maken van hash-functies:
- Een hashfunctie moet efficiënt worden geëvalueerd.
- Hash-waarden berekend op basis van hash-functies moeten uniform worden verdeeld, dit helpt botsingen te voorkomen.
- De programmeertaal Java biedt een algemene hashfunctie met de methode hashCode () in de superklasse Object.
public int hashCode ()(
//Logic goes here
)
Hash Collision in Java
Een hash-botsing treedt op wanneer twee of meer objecten dezelfde hash-waarde retourneren. Laten we een voorbeeld nemen van een hasjkaart van Java die gegevens opslaat in sleutel / waarde-paren. Wanneer we een object in een hash-map plaatsen, wordt de hash-waarde van de sleutel berekend en wordt op basis van deze hash-waarde bucketlocatie om waardeobject op te slaan gevonden. Objecten met verschillende hash-waarden moeten in verschillende emmers worden geplaatst. Wanneer twee of meer objecten dezelfde hash-waarde hebben, worden ze op dezelfde bucket-locatie opgeslagen met behulp van een extra gegevensstructuur, een gekoppelde lijst. Alle objecten met dezelfde hash-waarde worden aan elkaar gekoppeld met behulp van een gekoppelde lijst. Dit mechanisme wordt chaining genoemd. Hieronder volgen de manieren om botsingen af te handelen is een hashfunctie:
- Chaining: Zoals reeds besproken, is het idee achter chaining om een gekoppelde lijst met objecten met dezelfde hash-waarde te maken. Chaining is een eenvoudige techniek maar vereist extra geheugenoverhead.
- Open adressering: bij deze techniek worden alle elementen opgeslagen in een hashtabel waarin elk item een record of NULL bevat. Wanneer een element wordt doorzocht, wordt elk item in de hashtabel gezocht naar het gewenste record totdat het gewenste record is gevonden of wordt geconcludeerd dat het record niet in de tabel bestaat.
Voordelen van Hashing
Dit zijn de voordelen van hashing:
- Vergelijk de inhoud van twee bestanden eenvoudig en efficiënt, zonder ze te openen.
- Hash-functies worden gebruikt om de integriteit van een bestand te controleren.
- Met behulp van hashing is de zoekbewerking in gegevensstructuren sneller geworden.
- Hash-functies spelen een cruciale rol bij gegevensbeveiliging, aangezien de meeste beveiligingsalgoritmen en protocollen gebruikmaken van hashing.
- Hashing converteert gegevens naar een kortere waarde of sleutel met een vaste lengte die de oorspronkelijke tekenreeks vertegenwoordigt die via het netwerk kan worden verzonden.
Nadelen van Hashing
Naast voordelen zijn er ook enkele beperkingen voor hashing:
- Hashing kan niet worden geïmplementeerd om gegevens te sorteren.
- De hashbotsing kan praktisch niet worden vermeden, wat op zijn beurt tot inefficiëntie leidt.
Aanbevolen artikelen
Dit is een handleiding voor de hashfunctie in Java. Hier bespreken we toepassingen van hashfunctie samen met voor- en nadelen. U kunt ook de volgende artikelen bekijken voor meer informatie -
- Verklaring en initialisatie van VB.Net
- Java-programma met HashMap en TreeMap
- Soorten hashing in DBMS
- Technieken van steganografie
- Arrays in Java Programming
- Hashmap in Java