2010-11-03 4 views
2

J'ai un hashmap, je souhaite obtenir un tableau des valeurs dans ce hashmap, mais je souhaite que le tableau soit trié par les clés dans le hashmap.En Java: Obtenir tableau de valeurs d'une carte triée par les clés de la carte

Par exemple, si la carte ressemble à ceci:

  • < 2, obj1>
  • < 4, obj2>
  • < 0, obj3>
  • < 10, obj4>
  • < 5, obj5>
  • < 1, obj6>
  • < 15, obj7>
  • < 3, OBJ8>

Je veux que le tableau à être: [obj3, obj6, obj1, OBJ8, obj2, obj5, obj4, obj7]

Le plus vite c'est le mieux. Y a-t-il un moyen intégré de le faire?

Répondre

3

On dirait que vous voulez un SortedMap, plus précisément un . Vous pouvez utiliser le fait que la carte conserve une liste triée de clés pour générer votre tableau de sortie, par ex. en utilisant SortedMap.values() ou en itérant sur les entrées de la carte.

1

J'aime toujours quand je peux répondre sous la forme d'un test unitaire de passage:

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import junit.framework.TestCase; 

public class SortedMapValuesTest extends TestCase { 
    public void testSortedMapValues() throws Exception { 
     Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 
     map.put(1, 200); 
     map.put(2, 300); 
     map.put(3, 100); 
     List<Integer> list = getSortedMapValues(map); 
     assertEquals("[200, 300, 100]", list.toString()); 
    } 

    private <K extends Comparable<K>, V> List<V> getSortedMapValues(Map<K, V> map) { 
     ArrayList<K> keys = new ArrayList<K>(map.keySet()); 
     ArrayList<V> values = new ArrayList<V>(keys.size()); 
     Collections.sort(keys); 
     for (K key : keys) 
      values.add(map.get(key)); 
     return values; 
    } 
} 
Questions connexes