Java-kort med store og små bogstaver

1. Oversigt

Kort er en af ​​de mest almindelige datastrukturer i Java, og Snor er en af ​​de mest almindelige typer for et korts nøgle. Som standard, et kort af denne slags har store og små bogstaver.

I denne korte vejledning undersøger vi forskellige Kort implementeringer, der accepter alle sagsvarianter af en Snor som den samme nøgle.

2. Et nærmere kig på Kort med store og små bogstaver

Lad os undersøge det problem, vi prøver at løse mere detaljeret.

Antag, at vi har en Kort med en post:

Lad os tilføje den næste post:

map.put ("ABC", 2);

Når du arbejder med en Kort med store og små bogstaver slutter vi med to poster:

Men når man arbejder med en Kort med store og små bogstaver, der er ufølsomme, er indholdet:

I de næste eksempler dykker vi ned i store og små bogstaver i nogle populære Kort implementeringer: TreeMap, HashMapog LinkedHashMap.

3. TreeMap

TreeMap er en implementering af NavigableMap, hvilket betyder, at det altid sorterer poster efter indsættelse, baseret på en given Komparator. Også, TreeMap bruger en Komparator for at finde ud af, om en indsat nøgle er en duplikat eller en ny.

Derfor, hvis vi giver en sag-ufølsom SnorKomparator, vi får en sag-ufølsom TreeMap.

Heldigvis Snor leverer allerede denne statiske Komparator:

offentlig statisk endelig komparator CASE_INSENSITIVE_ORDER

som vi kan levere i konstruktøren:

Map treeMap = nyt TreeMap (String.CASE_INSENSITIVE_ORDER); treeMap.put ("abc", 1); treeMap.put ("ABC", 2);

Og nu, når vi kører tests, kan vi se, at størrelsen på Kort er en:

assertEquals (1, treeMap.size ());

og værdien opdateres til 2:

assertEquals (2, treeMap.get ("aBc"). intValue ()); assertEquals (2, treeMap.get ("ABc"). intValue ());

Lad os nu fjerne posten ved hjælp af den samme Snor, men med en anden sag:

treeMap.remove ("aBC"); assertEquals (0, treeMap.size ());

Det skal vi huske på fungerer som sætte og koster en gennemsnitlig tid på O (log n) til TreeMap sammenlignet med en HashMap der giver O (1) indsættelse og opslag.

Det er også værd at bemærke det TreeMap tillader ikke nul nøgler.

4. Apache CaseInsensitiveMap

Apache's Commons-Collections er et meget populært Java-bibliotek, der giver et stort antal nyttige klasser med CaseInsensitiveMap blandt dem.

CaseInsensitiveMap er en hash-baseret Kort, der konverterer nøgler til små bogstaver, før de tilføjes eller hentes. I modsætning til TreeMap, CaseInsensitiveMap tillader nul nøgleindsættelse.

Først skal vi tilføje fælles-samlinger4 afhængighed:

 org.apache.commons commons-collection4 4.4 

Nu kan vi bruge CaseInsensitiveMap og tilføj to poster:

Map commonsHashMap = new CaseInsensitiveMap (); commonsHashMap.put ("abc", 1); commonsHashMap.put ("ABC", 2);

Når vi tester det, forventer vi de samme resultater, som vi tidligere har set:

assertEquals (1, commonsHashMap.size ()); assertEquals (2, commonsHashMap.get ("aBc"). intValue ()); assertEquals (2, commonsHashMap.get ("ABc"). intValue ()); commonsHashMap.remove ("aBC"); assertEquals (0, commonsHashMap.size ());

5. Forår LinkedCaseInsensitiveMap

Spring Core er et Spring Framework-modul, der også giver hjælpeklasser, herunder LinkedCaseInsensitiveMap.

LinkedCaseInsensitiveMap indpakker en LinkedHashMap, som er en Kort baseret på en hash-tabel og en linket liste. I modsætning til LinkedHashMap, det tillader ikke nul nøgleindsættelse. LinkedCaseInsensitiveMap bevarer den oprindelige rækkefølge såvel som den originale kabinet af nøgler, samtidig med at opkaldsfunktioner som og fjerne under alle omstændigheder.

Lad os først tilføje fjederkerne afhængighed:

 org.springframework spring-core 5.2.5.RELEASE 

Nu kan vi initialisere et nyt LinkedCaseInsensitiveMap:

Map linkedHashMap = new LinkedCaseInsensitiveMap (); linkedHashMap.put ("abc", 1); linkedHashMap.put ("ABC", 2);

tilføj test det:

assertEquals (1, linkedHashMap.size ()); assertEquals (2, linkedHashMap.get ("aBc"). intValue ()); assertEquals (2, linkedHashMap.get ("ABc"). intValue ()); linkedHashMap.remove ("aBC"); assertEquals (0, linkedHashMap.size ());

6. Konklusion

I denne vejledning har vi set på forskellige måder at oprette en Java på Kort med store og små bogstaver og brugte forskellige klasser for at opnå dette.

Som altid er koden tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found