2011-11-08 3 views
2

Possible en double:
Java Ordered Maptri Java HashMap

Je liste d'objets de produit dans le HashMap<Integer,Product> je veux faire le tri

ProductName ProductCode Qty  Price 
    Pen   100011  10  10.00  product1 
    Penci  100012  5  5.00  product2 

    HashMap<Integer,Product> productMap = new HashMap<Integer,Product>(); 

Lorsque l'utilisateur clique sur ProductName, productCode ou Price, l'objet doit être trié en fonction de mes besoins.

I added like this. 
productMap .put(1,product1); 
productMap .put(2,product2); 

Comment puis-je faire this.I veulent trier en utilisant la clé object.not

S'il vous plaît aidez-moi.

Merci à l'avance

+0

http://stackoverflow.com/questions/1206073/sorting-a-collection-of-objects – sathis

+1

HashMap n'est pas ordonné. On pourrait d'abord obtenir le ['entrySet'] (http://download.oracle.com/javase/6/docs/api/java/util/Map.html#entrySet%28%29) puis trier ... Cependant, peut-être voir [cette question SO sur une "carte ordonnée"] (http://stackoverflow.com/questions/663374/java-ordered-map). –

Répondre

3

Si vous ne souhaitez pas accéder fréquemment aux valeurs basées sur la clé, vous ne devez pas utiliser HashMap. Il suffit d'utiliser une liste des valeurs et de mettre en œuvre différents Comparator<Product> s. Triez ensuite la liste avec le comparateur approprié.

2

HashMaps ne sont pas triés, vous pouvez utiliser TreeMap si vous avez besoin d'une carte triée. Alternativement, vous pourriez obtenir le keySet, le trier, l'itérer et tirer l'information de HashMap, mais ce serait inutile à mon humble avis.

1

HashMap map = nouveau HashMap(); La table de hachage stocke les valeurs sous forme de clé, valeur paire, et elle n'a pas été synchronisée (cela signifie qu'elle peut agir sur de nombreux threads). La capacité initiale de hasmap est de 16. Le facteur de charge est de 0,75. capacité initiale * loadfactor = 16 * 0,75 = 12 cela signifie que, après le stockage de la douzième paire de clés, la taille de la carte de hachage est doublée.

Lorsque vous utilisez la clé et la valeur pair.them ces valeurs seront utilisées de manière non ordonnée ..

Vous pouvez aussi (pour le tri) ------->

public LinkedHashMap sortHashMapByValuesD(HashMap passedMap) { 
List mapKeys = new ArrayList(passedMap.keySet()); 
List mapValues = new ArrayList(passedMap.values()); 
Collections.sort(mapValues); 
Collections.sort(mapKeys); 

LinkedHashMap sortedMap = 
    new LinkedHashMap(); 

Iterator valueIt = mapValues.iterator(); 
while (valueIt.hasNext()) { 
    Object val = valueIt.next(); 
    Iterator keyIt = mapKeys.iterator(); 

    while (keyIt.hasNext()) { 
     Object key = keyIt.next(); 
     String comp1 = passedMap.get(key).toString(); 
     String comp2 = val.toString(); 

     if (comp1.equals(comp2)){ 
      passedMap.remove(key); 
      mapKeys.remove(key); 
      sortedMap.put((String)key, (Double)val); 
      break; 
     } 

    } 

} 
return sortedMap; 

}