2011-11-08 45 views
2

可能重複:
Java Ordered MapJava的HashMap的排序

我在HashMap<Integer,Product>產品對象的名單我想做的排序

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

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

當用戶點擊在ProductName,productCode或Price上,對象應根據我的要求進行排序。

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

我怎麼能幹這事要使用object.not關鍵

請幫我整理。

在此先感謝

+0

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

+1

HashMap是無序的。可以先獲得['entrySet'](http://download.oracle.com/javase/6/docs/api/java/util/Map.html#entrySet%28%29),然後對其進行排序...然而,也許看到[這是關於「有序地圖」的SO問題](http://stackoverflow.com/questions/663374/java-ordered-map)。 – 2011-11-08 05:47:48

回答

3

如果您不想經常訪問基於鍵的值,則不應該使用HashMap。 只需使用值列表並實現不同的Comparator<Product> s。然後用適當的比較器對列表進行排序。

2

包含HashMap不排序,你可以使用TreeMap如果你需要一個有序映射。或者,你可以得到keySet,對它進行排序,迭代它並從HashMap中獲取信息,但這將是不必要的恕我直言。

1

HashMap map = new HashMap();

哈希映射以鍵值對的形式存儲值,它不同步(意味着它可以對多個線程起作用)。hasmap的空間容量爲16,負載因子爲0.75。 初始容量* loadfactor = 16 * 0.75 = 12 這意味着在存儲第12個密鑰對之後哈希映射的大小加倍。

當你使用它的鍵和值pair.them這些值將在無序的方式來使用..

你也可以試試(排序)------->

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; 

}