关于sortedmap:Java HashMap排序

Java HashMap sorting

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Java Ordered Map

我在HashMap中有产品对象列表,我想进行排序

1
2
3
4
5
   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时,该对象应根据我的要求进行排序。

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

我该怎么做。我想使用object.not键进行排序

请帮我。

提前致谢


如果您不想经常根据键访问值,则不应使用HashMap。
只需使用值列表并实现不同的Comparator。 然后使用适当的比较器对列表进行排序。


HashMaps没有排序,如果需要排序映射,可以使用TreeMap。 或者,您可以获取keySet,对其进行排序,迭代并从HashMap中提取信息,但这是不必要的恕我直言。


HashMap map = new HashMap();

hash map以key,value pair的形式存储值。它没有同步(意味着它可以作用于多个线程).annemap的初始容量是16.并且加载因子是0.75。
初始容量* loadfactor = 16 * 0.75 = 12
这意味着在存储第12个关键值对之后,哈希映射大小加倍。

当您使用其键和值对时,这些值将以无序方式使用。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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;

}