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;
}