Java geordende kaart

Is er in Java een object dat zich gedraagt als een kaart voor het opslaan en openen van sleutel/waarde-paren, maar een geordende lijst met sleutels en een geordende lijst met waarden kan retourneren, zodat de sleutel- en waardelijsten zich in dezelfde bestellen?

Dus als uitleg per code ben ik op zoek naar iets dat zich gedraagt als mijn fictieve OrderedMap:

OrderedMap<Integer, String> om = new OrderedMap<>();
om.put(0, "Zero");
om.put(7, "Seven");
String o = om.get(7); // o is "Seven"
List<Integer> keys = om.getKeys();
List<String> values = om.getValues();
for(int i = 0; i < keys.size(); i++)
{
    Integer key = keys.get(i);
    String value = values.get(i);
    Assert(om.get(key) == value);
}

Antwoord 1, autoriteit 100%

De SortedMap-interface (met de implementatie TreeMap) zou je vriend moeten zijn.

De interface heeft de volgende methoden:

  • keySet()die een reeks sleutels in oplopende volgorde retourneert
  • values()die een verzameling van alle waarden retourneert in oplopende volgorde van de corresponderende sleutels

Dus deze interface voldoet precies aan uw eisen. De sleutels moeten echter een betekenisvolle volgorde hebben. Anders kunt u de LinkedHashMapgebruiken waar de bestelling wordt bepaald door de invoegvolgorde.


Antwoord 2, autoriteit 51%

Is er een object dat fungeert als een kaart voor het opslaan en openen van sleutel/waarde-paren, maar dat een geordende lijst met sleutels en een geordende lijst met waarden kan retourneren, zodat de sleutel- en waardelijsten in dezelfde volgorde staan?

Je zoekt naar java. util.LinkedHashMap. U krijgt een lijst met Kaart .Entry<K,V>-paren, die altijd in dezelfde volgorde worden herhaald. Die volgorde is dezelfde als de volgorde waarin je de items plaatst. Of gebruik de java.util.SortedMap, waarbij de sleutels een natuurlijke volgordemoeten hebben of gespecificeerd moeten worden door een Comparator.


Antwoord 3, autoriteit 6%

LinkedHashMap handhaaft de volgorde van de toetsen.

java.util.LinkedHashMap lijkt verder net als een normale HashMap te werken.


Antwoord 4, autoriteit 2%

Ik denk dat de verzameling die het dichtst in de buurt komt van het framework de Gesorteerde Kaart


5

Ik denk dat de SortedMap-interface handelt waarvoor u vraagt ​​en Treemap implementeert dat.

http: //java.sun .com / j2se / 1.5.0 / documenten / API / JAVA / UTIL / SORTEDMAP.HTML
http://java.sun.com/ j2se/1.5.0/docs/api/java/util/TreeMap.html


Antwoord 6

Sinds Java 6 is er ook een non-blocking thread-safe alternatief voor Boomkaart.
Zie ConcurrentSkipListMap.


Antwoord 7

Moderne Java-versie van het antwoord van Steffi Keran

public class Solution {
    public static void main(String[] args) {
        // create a simple hash map and insert some key-value pairs into it
        Map<String, Integer> map = new HashMap<>();
        map.put("Python", 3);
        map.put("C", 0);
        map.put("JavaScript", 4);
        map.put("C++", 1);
        map.put("Golang", 5);
        map.put("Java", 2);
        // Create a linked list from the above map entries
        List<Map.Entry<String, Integer>> list = new LinkedList<>(map.entrySet());
        // sort the linked list using Collections.sort()
        list.sort(Comparator.comparing(Map.Entry::getValue));
        list.forEach(System.out::println);
    }
}

Other episodes