2011-11-08 44 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; 

}