2011-11-08 3 views
2

가능한 중복 :
Java Ordered Map자바의 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)을 얻은 다음이를 정렬 할 수 있습니다. 그러나, 아마도이 [그래서 순서지도에 대한 질문] 참조 (http://stackoverflow.com/questions/663374/java-ordered-map). –

답변

3

키를 기반으로하는 값에 자주 액세스하지 않으려면 HashMap을 사용하면 안됩니다. 값 목록을 사용하고 다른 Comparator<Product>을 구현하기 만하면됩니다. 그런 다음 적절한 비교 자로 목록을 정렬하십시오.

2

HashMaps을 당신이 정렬 된지도를해야 할 경우 TreeMap를 사용할 수 정렬되지 않습니다. 또는 keySet을 가져 와서 정렬하고 반복하고 HashMap에서 정보를 가져올 수 있지만 불필요한 IMHO 일 수 있습니다.

1

HashMap map = new HashMap();

해시 맵은 키, 값 쌍의 형태로 값을 저장하며 동기화되지 않았습니다 (많은 스레드에서 작동 할 수 있음을 의미합니다). hasmap의 총 용량은 16이고로드 계수는 0.75입니다. intact capacity * loadfactor = 16 * 0.75 = 12 12 번째 키 vale 쌍을 저장 한 후 해시 맵 크기가 두 배가된다는 것을 의미합니다.

이 값은 정렬되지 않은 방법으로 사용됩니다의 키와 값 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; 

}