Java térkép kis- és nagybetűkkel nem érzékeny kulcsokkal
1. Áttekintés
Térkép a Java egyik leggyakoribb adatstruktúrája, és Húr a térképkulcs egyik leggyakoribb típusa. Alapértelmezés szerint, egy ilyen térkép nagybetű-érzékeny kulcsokkal rendelkezik.
Ebben a rövid bemutatóban különbözőeket fedezünk fel Térkép megvalósítások, amelyek fogadja el az a esetváltozatait Húr mint ugyanaz a kulcs.
2. Közelebbről Térkép kis- és nagybetűkkel nem rendelkező kulcsokkal
Vizsgáljuk meg részletesebben azt a problémát, amelyet megpróbálunk megoldani.
Tegyük fel, hogy van egy Térkép egy bejegyzéssel:

Adjuk hozzá a következő bejegyzést:
map.put ("ABC", 2);
Amikor a Térkép kis- és nagybetű érzékeny kulcsokkal két bejegyzést kapunk:

De amikor a Térkép kis- és nagybetűkkel nem rendelkező kulcsokkal a tartalom a következő lesz:

A következő példákban néhány népszerű változatban nem különböztetjük meg a kis- és nagybetűket Térkép megvalósítások: TreeMap, HashMap, és LinkedHashMap.
3. TreeMap
TreeMap megvalósítása NavigableMap, ami azt jelenti, hogy a beillesztés után mindig rendezi a bejegyzéseket, egy adott alapján Összehasonlító. Is, TreeMap használja a Összehasonlító hogy a beillesztett kulcs duplikátum vagy új-e.
Ebből kifolyólag, ha megkülönböztetjük a kis- és nagybetűket HúrÖsszehasonlító, megkapjuk a kis- és nagybetűk különbségét TreeMap.
Szerencsére, Húr már szállítja ezt a statikát Összehasonlító:
public static final Összehasonlító CASE_INSENSITIVE_ORDER
amelyet a konstruktorban szállíthatunk:
Map treeMap = új TreeMap (String.CASE_INSENSITIVE_ORDER); treeMap.put ("abc", 1); treeMap.put ("ABC", 2);
És most, amikor teszteket futtatunk, láthatjuk, hogy a Térkép az egyik:
assertEquals (1, treeMap.size ());
és az érték 2-re frissül:
assertEquals (2, treeMap.get ("aBc"). intValue ()); assertEquals (2, treeMap.get ("ABc"). intValue ());
Most távolítsuk el a bejegyzést, ugyanazt használva Húr, de egy másik esettel:
treeMap.remove ("aBC"); assertEquals (0, treeMap.size ());
Ezt szem előtt kell tartanunk funkciók, mint tedd és kap átlagosan O időbe kerül (log n) a TreeMap összehasonlítva a HashMap amely biztosítja az O (1) beillesztést és keresést.
Érdemes ezt is megjegyezni TreeMap nem engedi nulla kulcsok.
4. Apache's CaseInsensitiveMap
Az Apache's Commons-Collections egy nagyon népszerű Java könyvtár, amely számos hasznos osztályt kínál CaseInsensitiveMap közöttük.
CaseInsensitiveMap hash-alapú Térkép, amely a kulcsokat kisbetűvé alakítja, mielőtt hozzáadnák vagy lekérnék őket. nem úgy mint TreeMap, CaseInsensitiveMap lehetővé teszi nulla kulcs behelyezése.
Először hozzá kell adnunk a commons-gyűjtemények4 függőség:
org.apache.commons commons-gyűjtemények 4.4
Most már használhatjuk CaseInsensitiveMap és adjon hozzá két bejegyzést:
Map commonsHashMap = new CaseInsensitiveMap (); commonsHashMap.put ("abc", 1); commonsHashMap.put ("ABC", 2);
Amikor teszteljük, ugyanazokra az eredményekre számítunk, mint korábban:
assertEquals (1, commonsHashMap.size ()); assertEquals (2, commonsHashMap.get ("aBc"). intValue ()); assertEquals (2, commonsHashMap.get ("ABc"). intValue ()); commonsHashMap.remove ("aBC"); assertEquals (0, commonsHashMap.size ());
5. Tavaszi LinkedCaseInsensitiveMap
A Spring Core egy Spring Framework modul, amely segédprogramokat is tartalmaz, beleértve a következőket: LinkedCaseInsensitiveMap.
LinkedCaseInsensitiveMap pakolások a LinkedHashMap, ami a Térkép hash tábla és összekapcsolt lista alapján. nem úgy mint LinkedHashMap, nem engedi nulla kulcs behelyezése. LinkedCaseInsensitiveMap megőrzi az eredeti sorrendet, valamint a kulcsok eredeti burkolatát, miközben lehetővé teszi a hívási funkciók, például kap és eltávolítani minden esetben.
Először tegyük hozzá a rugómag függőség:
org.springframework rugós mag 5.2.5.KÖZLEMÉNY
Most inicializálhatunk egy újat LinkedCaseInsensitiveMap:
Map linkedHashMap = új LinkedCaseInsensitiveMap (); linkedHashMap.put ("abc", 1); linkedHashMap.put ("ABC", 2);
add teszt:
assertEquals (1, linkeltHashMap.size ()); assertEquals (2, linkeltHashMap.get ("aBc"). intValue ()); assertEquals (2, linkeltHashMap.get ("ABc"). intValue ()); linkedHashMap.remove ("aBC"); assertEquals (0, linkeltHashMap.size ());
6. Következtetés
Ebben az oktatóanyagban különböző módszereket vizsgáltunk a Java létrehozására Térkép kis- és nagybetűkkel nem rendelkező kulcsokkal, és ennek megszerzéséhez különböző osztályokat használtak.
Mint mindig, a kód elérhető a GitHubon.