Java HashMap сортировка

Возможный дубликат:
Упорядоченная карта Java

У меня есть список объекта продукта в 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

Пожалуйста, помогите мне.

заранее спасибо

3 ответа

Решение

Если вы не хотите часто обращаться к значениям, основанным на ключе, вы не должны использовать HashMap. Просто используйте список значений и реализуйте разные Comparator<Product>s. Затем отсортируйте список с помощью соответствующего компаратора.

HashMaps не отсортированы, вы можете использовать TreeMap, если вам нужна отсортированная карта. В качестве альтернативы, вы можете получить набор ключей, отсортировать его, выполнить итерацию и получить информацию из HashMap, но это было бы ненужным ИМХО.

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;

}

Другие вопросы по тегам