1. ホーム
  2. java

[解決済み] HashMapを値でソートする【重複】について

2022-03-07 18:40:51

質問

をソートする必要があります。 HashMap に格納されている値に従って その HashMap は、phoneに格納されている連絡先名を含む。

また、値をソートすると同時にキーも自動的にソートされるようにする必要があります。

HashMap<Integer,String> map = new HashMap<Integer,String>();
map.put(1,"froyo");
map.put(2,"abby");
map.put(3,"denver");
map.put(4,"frost");
map.put(5,"daisy");

必須の出力です。

2,abby;
5,daisy;
3,denver;
4,frost;
1,froyo;

解決方法は?

Javaを前提にすると、このようにハッシュマップをソートすることができます。

public LinkedHashMap<Integer, String> sortHashMapByValues(
        HashMap<Integer, String> passedMap) {
    List<Integer> mapKeys = new ArrayList<>(passedMap.keySet());
    List<String> mapValues = new ArrayList<>(passedMap.values());
    Collections.sort(mapValues);
    Collections.sort(mapKeys);

    LinkedHashMap<Integer, String> sortedMap =
        new LinkedHashMap<>();

    Iterator<String> valueIt = mapValues.iterator();
    while (valueIt.hasNext()) {
        String val = valueIt.next();
        Iterator<Integer> keyIt = mapKeys.iterator();

        while (keyIt.hasNext()) {
            Integer key = keyIt.next();
            String comp1 = passedMap.get(key);
            String comp2 = val;

            if (comp1.equals(comp2)) {
                keyIt.remove();
                sortedMap.put(key, val);
                break;
            }
        }
    }
    return sortedMap;
}

単なるキックオフの例です。この方法は、HashMapをソートし、重複する値も保持するため、より便利です。