📜  按值对 LinkedHashMap 进行排序的Java程序(1)

📅  最后修改于: 2023-12-03 15:25:53.647000             🧑  作者: Mango

Java程序:按值对LinkedHashMap进行排序

在Java中,我们有一个数据结构称为LinkedHashMap。它类似于HashMap,但它保留插入元素的顺序。

有时我们需要对该数据结构中的值进行排序,而不是按照默认的插入顺序进行排序。在本文中,我们将介绍如何按值对LinkedHashMap进行排序。

步骤1:创建LinkedHashMap

首先,我们需要创建LinkedHashMap并填充它。以下是示例代码:

LinkedHashMap<String, Integer> lhm = new LinkedHashMap<>();
lhm.put("John", 56);
lhm.put("Mary", 28);
lhm.put("Alex", 41);
lhm.put("Jack", 36);

上面创建了一个LinkedHashMap,其中的键是String类型,值是Integer类型。我们插入了四个键值对。

步骤2:将LinkedHashMap转换为List

接下来,我们需要将LinkedHashMap转换为一个List。这可以通过以下代码完成:

List<Map.Entry<String, Integer>> list = new LinkedList<>(lhm.entrySet());

上面的代码将LinkedHashMap转换为List,将每个键值对表示为Map.Entry对象。这是必要的,因为我们将使用Collections.sort()方法对List进行排序。

步骤3:创建比较器

现在我们需要创建一个比较器。我们将使用Comparator接口来创建它。以下是示例代码:

Comparator<Map.Entry<String, Integer>> valueComparator = new Comparator<Map.Entry<String, Integer>>() {

    @Override
    public int compare(Map.Entry<String, Integer> e1, Map.Entry<String, Integer> e2) {
        return e1.getValue().compareTo(e2.getValue());
    }
};

上面的代码创建了一个比较器,它比较键值对的值。我们使用getValue()方法来获取值。该方法返回一个Integer,因此我们可以使用Integer类中的compareTo()方法进行比较。

步骤4:使用Collections.sort()方法对List进行排序

我们已经准备好了List和Comparator。我们现在可以使用Collections.sort()方法对List进行排序。以下是示例代码:

Collections.sort(list, valueComparator);

上面的代码将按照值对List进行排序。排序后,List中的元素将以升序排列。

步骤5:将排序后的List转换回LinkedHashMap

排序后,我们需要将List转换回LinkedHashMap。这可以通过以下代码完成:

LinkedHashMap<String, Integer> sortedMap = new LinkedHashMap<>();
for (Map.Entry<String, Integer> entry : list) {
    sortedMap.put(entry.getKey(), entry.getValue());
}

上面的代码遍历List中的每个元素,并将其添加到一个新的LinkedHashMap中。由于List按值进行排序,因此排序后的元素将按所需顺序添加到新的LinkedHashMap中。

完整代码

以下是完整的Java代码:

import java.util.*;

public class SortLinkedHashMap {

    public static void main(String[] args) {

        LinkedHashMap<String, Integer> lhm = new LinkedHashMap<>();
        lhm.put("John", 56);
        lhm.put("Mary", 28);
        lhm.put("Alex", 41);
        lhm.put("Jack", 36);

        List<Map.Entry<String, Integer>> list = new LinkedList<>(lhm.entrySet());

        Comparator<Map.Entry<String, Integer>> valueComparator = new Comparator<Map.Entry<String, Integer>>() {

            @Override
            public int compare(Map.Entry<String, Integer> e1, Map.Entry<String, Integer> e2) {
                return e1.getValue().compareTo(e2.getValue());
            }
        };

        Collections.sort(list, valueComparator);

        LinkedHashMap<String, Integer> sortedMap = new LinkedHashMap<>();
        for (Map.Entry<String, Integer> entry : list) {
            sortedMap.put(entry.getKey(), entry.getValue());
        }

        System.out.println(sortedMap);
    }
}

上面的代码将输出以下内容:

{Mary=28, Jack=36, Alex=41, John=56}

这是已排序的LinkedHashMap。

结论

在本文中,我们学习了如何按值对LinkedHashMap进行排序。我们首先将LinkedHashMap转换为List,然后使用Comparator接口创建比较器,最后使用Collections.sort()方法对List进行排序。最后,我们将排序后的List转换回LinkedHashMap。