Java:
Att använda associativa arrayer
Hur man gör:
Java har inte inbyggda associativa arrayer som vissa språk gör, men det tillhandahåller Map
-interfacet och klasser som HashMap
och TreeMap
för att fylla den rollen. Så här använder du en HashMap
:
import java.util.HashMap;
import java.util.Map;
public class LearnMaps {
public static void main(String[] args) {
// Skapar en HashMap
Map<String, Integer> ageOfFriends = new HashMap<>();
// Lägger till element
ageOfFriends.put("Alice", 24);
ageOfFriends.put("Bob", 30);
ageOfFriends.put("Charlie", 28);
// Får tillgång till element
System.out.println("Alices ålder: " + ageOfFriends.get("Alice"));
// Hantering av icke-existerande nycklar
System.out.println("Åldern för någon som inte finns i mappen: " + ageOfFriends.getOrDefault("Dan", -1));
// Itererar över elementen
for (Map.Entry<String, Integer> entry : ageOfFriends.entrySet()) {
System.out.println(entry.getKey() + " är " + entry.getValue() + " år gammal.");
}
}
}
Exempelutdata:
Alices ålder: 24
Åldern för någon som inte finns i mappen: -1
Alice är 24 år gammal.
Bob är 30 år gammal.
Charlie är 28 år gammal.
HashMap
är bara en implementering. Om dina nycklar är unika och du behöver dem sorterade, överväg TreeMap
. För en karta som behåller insättningsordningen är LinkedHashMap
din vän.
Fördjupning
Map i Java är en del av Collections Framework, introducerad i JDK 1.2, men har sett betydande förbättringar under åren, inklusive introduktionen av forEach
-metoden i Java 8 för enklare iteration över poster. Valet av map-implementering (HashMap
, LinkedHashMap
, TreeMap
) bör styras av dina specifika behov när det gäller ordning och prestanda. Till exempel erbjuder HashMap
O(1) tidsprestanda för de grundläggande operationerna (get och put), förutsatt att hashfunktionen sprider elementen lämpligt bland hinkarna. Men om du behöver sortering baserat på naturlig ordning eller anpassade jämförare, är TreeMap
att gå till, vilket ger O(log n) tid för insättning och uppslagning.
Innan Map
introducerades implementerades associativa arrayer vanligtvis med två parallella arrayer (en för nycklar, en för värden) eller anpassade datastrukturer med mindre effektivitet. Nuvarande alternativ till Map
och dess implementeringar kan inkludera tredjepartsbibliotek som erbjuder specialiserade kartor, såsom bidirektionella kartor (BiMap i Googles Guava-bibliotek) för fall där du effektivt behöver hitta en nyckel genom dess värde. Dock, för de flesta användningsfall i Java, är standardbibliotekets kartor robusta och flexibla nog för att hantera uppgiften.