📅  最后修改于: 2023-12-03 15:25:53.647000             🧑  作者: Mango
在Java中,我们有一个数据结构称为LinkedHashMap。它类似于HashMap,但它保留插入元素的顺序。
有时我们需要对该数据结构中的值进行排序,而不是按照默认的插入顺序进行排序。在本文中,我们将介绍如何按值对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类型。我们插入了四个键值对。
接下来,我们需要将LinkedHashMap转换为一个List。这可以通过以下代码完成:
List<Map.Entry<String, Integer>> list = new LinkedList<>(lhm.entrySet());
上面的代码将LinkedHashMap转换为List,将每个键值对表示为Map.Entry对象。这是必要的,因为我们将使用Collections.sort()方法对List进行排序。
现在我们需要创建一个比较器。我们将使用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()方法进行比较。
我们已经准备好了List和Comparator。我们现在可以使用Collections.sort()方法对List进行排序。以下是示例代码:
Collections.sort(list, valueComparator);
上面的代码将按照值对List进行排序。排序后,List中的元素将以升序排列。
排序后,我们需要将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。