Java-kielessä HashMap-luokka mah­dol­lis­taa tietojen tal­len­ta­mi­sen avain-arvo-pareina. Tämä helpottaa luettelon hakua ja hallintaa, mutta tarjoaa myös lukuisia käyt­tö­vaih­toeh­to­ja. Käymme tässä läpi tär­keim­mät me­ne­tel­mät.

Mitä ovat HashMaps Java-kielessä?

Tietojen tal­len­ta­mi­seen ja ha­ke­mi­seen on useita eri tapoja. Paras tal­len­nus­ta­pa riippuu siitä, miten aiot käyttää tietoja. Useissa ta­pauk­sis­sa Java HashMap -luokka on to­den­nä­köi­ses­ti paras ratkaisu. Toisin kuin muut me­ne­tel­mät, tämä luokka tallentaa tiedot avain-arvo-pareina. Tämä tar­koit­taa, että jo­kai­sel­le avaimelle on mää­ri­tet­ty tar­kal­leen yksi arvo. Jos haluat hakea arvon, voit käyttää vastaavaa avainta saa­dak­se­si haluamasi tuloksen. Avaimet ja arvot voivat koostua täysin eri­lai­sis­ta tie­to­tyy­peis­tä, kuten merk­ki­jo­nois­ta, nu­me­rois­ta tai muista ob­jek­teis­ta.

Java HashMap -luokka tarjoaa useita etuja. En­sin­nä­kin sen avulla voit suorittaa nopean haun oh­jel­moin­ti­kie­les­sä. Avain-arvo-lä­hes­ty­mis­ta­pa varmistaa myös, että yhdelle avaimelle ei määritetä useita arvoja, mikä estää pääl­lek­käi­syy­det. Voit kuitenkin lisätä saman objektin useita kertoja eri avaimilla. Tällainen tallennus- ja ha­ku­toi­min­to vaikuttaa suo­ri­tus­ky­kyyn po­si­tii­vi­ses­ti ver­rat­tu­na jäykkään luet­te­loon, joka on huo­mat­ta­vas­ti vähemmän joustava. Tämä on myös yksi avain-arvo-tal­len­nus­ti­lan suu­rim­mis­ta eduista, joka käyttää samaa pe­ri­aa­tet­ta. Seu­raa­vis­sa osioissa näytämme, kuinka luoda ja käyttää Java HashMap-karttoja.

HashMap-karttojen luominen ja käyttö Java-kielellä

Uuden HashMap-kartan luo­mi­sek­si Java-kielellä sinun on ensin tuotava luokka. Tätä varten käytä Java-komentoa import. Koodi näyttää tältä:

import java.util.HashMap;
HashMap<String, String> nameOfTheHashMap = new HashMap<String, String> ();
java

Kaksi da­ta­tyyp­piä, jotka on erotettu toi­sis­taan pilkulla (tässä ta­pauk­ses­sa String, String), ovat avain ja arvo.

Uuden HashMap-kartan luominen

Se­lit­tääk­sem­me paremmin Java HashMap-karttojen toimintaa, olemme keksineet yk­sin­ker­tai­sen esimerkin. Esi­mer­kis­säm­me on luettelo asiak­kais­ta, jotka yritys haluaa tallentaa ja joihin se haluaa päästä käsiksi milloin tahansa. Luet­te­los­sa on kunkin asiakkaan nimi ja yk­si­löl­li­nen asia­kas­tun­nus. Vaikka asia­kas­tun­nus (esi­mer­kis­säm­me avain) on aina yk­si­löl­li­nen, on mah­dol­lis­ta, että useilla asiak­kail­la on sama nimi. Jo­kai­sel­la asiak­kaal­la on kuitenkin oma yk­si­löl­li­nen tun­nuk­sen­sa. Tämä tunnus tal­len­ne­taan ko­ko­nais­lu­ku­tyyp­pi­se­nä datana ja nimet merk­ki­jo­noi­na. Näin voit määrittää tämän Java Hash­Ma­pis­sa:

import java.util.HashMap;
public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	}
}
java

Ele­ment­tien li­sää­mi­nen

Nyt meillä on Java HashMap, mutta se on vielä tyhjä. Li­sä­täk­sem­me uusia avain-arvo-pareja käytämme put() -me­ne­tel­mää. Se toimii seu­raa­vas­ti:

public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	customerList.put (1077, "Jerry Mowry");
	customerList.put (15312, "Peter Smith");
	customerList.put (73329, "Maria Grosso");
	System.out.println(customerList);
	}
}
java

Käytämme komentoa System.out.println asia­kas­tie­to­jen näyt­tä­mi­seen. Tu­los­tuk­sen pitäisi näyttää tältä:

{1077=Jerry Mowry, 15312=Peter Smith, 73329=Maria Grosso}
java

Ele­ment­tien hakeminen

Nyt olemme luoneet asia­kas­luet­te­lon, joka voi sisältää lukuisia mer­kin­tö­jä. Haluamme myös pystyä kä­sit­te­le­mään kutakin asia­kas­tie­toa erikseen. Tätä varten välitämme avaimen get() -metodille. Tässä on esimerkki siitä, miten tämä toimii:

public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	customerList.put (1077, "Jerry Mowry");
	customerList.put (15312, "Peter Smith");
	customerList.put (73329, "Maria Grosso");
	System.out.println(customerList.get(1077));
	}
}
java

Vain nimi “Jerry Mowry” tulisi näkyä.

Mer­kin­tö­jen pois­ta­mi­nen

Jos haluat poistaa merkinnän, käytä me­ne­tel­mää remove(). Tässä on esimerkki tämän me­ne­tel­män käytöstä:

public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	customerList.put (1077, "Jerry Mowry");
	customerList.put (15312, "Peter Smith");
	customerList.put (73329, "Maria Grosso");
	customerList.remove(1077);
	System.out.println(customerList);
	}
}
java

Tulostus näyttää nyt tältä:

{15312=Peter Smith, 73329=Maria Grosso}
java

Toinen vaih­toeh­to on poistaa koko luettelo. Tätä varten käytä me­ne­tel­mää clear().

public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	customerList.put (1077, "Jerry Mowry");
	customerList.put (15312, "Peter Smith");
	customerList.put (73329, "Maria Grosso");
	customerList.clear();
	System.out.println(customerList);
	}
}
java

Nyt saamme vain seuraavan tuloksen:

{ }
java

Kuinka määrittää mer­kin­tö­jen lukumäärä

Vaikka Java HashMap on melko yk­sin­ker­tai­nen, voit käyttää tätä luokkaa myös suu­rem­pien ja mo­ni­mut­kai­sem­pien pro­jek­tien hal­lin­taan. Suu­rem­mas­sa pro­jek­tis­sa saatat haluta määrittää tarkasti, kuinka monta merkintää sinulla on. Loppujen lopuksi kyseessä on koko asia­kas­kun­ta­si. Voit käyttää size() tähän tar­koi­tuk­seen. Näin se tehdään:

public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	customerList.put (1077, "Jerry Mowry");
	customerList.put (15312, "Peter Smith");
	customerList.put (73329, "Maria Grosso");
	System.out.println(customerList.size());
	}
}
java

Esi­mer­kis­säm­me tu­los­te­taan luku 3.

Kuinka näyttää vain avaimet tai arvot

Voit myös saada luettelon, joka sisältää vain avaimet tai arvot, käyt­tä­mäl­lä for-each-silmukkaa. Avaimien ha­ke­mi­seen käytetään keySet() -me­ne­tel­mää ja arvojen ha­ke­mi­seen values() -me­ne­tel­mää. Seu­raa­vas­sa koo­die­si­mer­kis­sä käytämme values():

public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	customerList.put (1077, "Jerry Mowry");
	customerList.put (15312, "Peter Smith");
	customerList.put (73329, "Maria Grosso");
	for (String i : customerList.values()) {
		System.out.println(i);
		}
	}
}
java

Tulostus on:

Jerry Mowry
Peter Smith
Maria Grosso
java

HashMap-taulukon tar­kis­ta­mi­nen tietyn arvon tai avaimen varalta

Tiettyyn mer­kin­tään pääsyn lisäksi voit myös tarkistaa, onko merkintä jo olemassa Java Hash­Ma­pis­sa. Voit tehdä tämän käyt­tä­mäl­lä me­ne­tel­mää containsKey() (avaimille) ja me­ne­tel­mää containsValue() (arvoille). Jos elementti on mukana, tulos on “true”. Jos elementti ei ole Hash­Ma­pis­sa, tulos on “false”. Molemmat me­ne­tel­mät toimivat seu­raa­vas­ti:

public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	customerList.put (1077, "Jerry Mowry");
	customerList.put (15312, "Peter Smith");
	customerList.put (73329, "Maria Grosso");
	System.out.println(customerList.containsKey(15312));
	System.out.println(customerList.containsValue("Stuart Miller");
	}
}
java

Koska avain “15312” on mukana, mutta arvo “Stuart Miller” ei ole, tulos näyttää tältä.

true
false
java

81dd3d98343240d17e9a1e470553bdb0

Siirry pää­va­lik­koon