使用java,如何将LinkedHashMap按照值排序,值是int类型,并写出完整代码
时间: 2024-09-12 22:01:51 浏览: 39
在Java中,`LinkedHashMap`本身并不支持直接按值排序,因为它是哈希表的一个子类,其元素是无序的。但是你可以通过自定义比较器(Comparator)并配合`Collections.sort()`方法,对`LinkedHashMap`的values()集合进行排序。
以下是一个完整的例子,展示了如何按照`LinkedHashMap`的整数值对集合进行升序排序:
```java
import java.util.*;
// 定义一个简单的User类作为键,包含int类型的value属性
class User {
private int value;
// 省略getter和setter...
public User(int value) {
this.value = value;
}
}
public class Main {
public static void main(String[] args) {
// 创建一个LinkedHashMap,键为User对象,值也为int
LinkedHashMap<User, Integer> linkedMap = new LinkedHashMap<>();
// 添加一些用户及其对应的值
linkedMap.put(new User(5), 1);
linkedMap.put(new User(3), 4);
linkedMap.put(new User(8), 2);
// 自定义比较器,这里我们假设是升序排序
Comparator<User> comparator = Comparator.comparingInt(User::getValue);
// 将values()集合排序,然后存储到新的List中
List<Integer> sortedValues = new ArrayList<>(linkedMap.values());
Collections.sort(sortedValues, comparator);
System.out.println("Sorted values:");
for (Integer value : sortedValues) {
System.out.println(value);
}
// 如果你想保持原map的结构,可以遍历排序后的values列表,再重新构造一个新的map
Map<User, Integer> sortedMap = new LinkedHashMap<>();
for (int i = 0; i < sortedValues.size(); i++) {
sortedMap.put(linkedMap.keySet().toArray()[i], sortedValues.get(i));
}
System.out.println("Sorted map (key-value pairs):");
for (Map.Entry<User, Integer> entry : sortedMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
```
阅读全文