Java 使用Comparable接口排序LinkedHashMap的值
LinkedHashMap是一个泛型类,用于实现Map接口。它是HashMap类的子类,因此可以使用所有方法,并且可以执行HashMap类能够执行的类似操作。
Java提供了多种排序LinkedHashMap的方法,本文将通过Comparable接口学习如何创建并按值排序。
按值排序LinkedHashMap的程序
在直接跳转到排序程序之前,让我们先了解一些概念−
LinkedHashMap
如前所述,LinkedHashMap类扩展了HashMap类以实现Map接口。它维护键值对。键是用于获取和接收与其关联的值的对象。它以插入的顺序将地图的元素存储在LinkedList中,即它保持元素的插入顺序。此外,每当我们返回其元素时,它将按照插入顺序打印出来。
LinkedHashMap的一般语法如下−
语法
LinkedHashMap< TypeOfKey, TypeOfValue > nameOfMap = new LinkedHashMap<>();
在上述语法中,
TypeOfKey − 指定键的数据类型。
TypeOfValue − 指定要存储在映射中的值的数据类型。
nameOfMap − 为您的映射指定一个合适的名称。
可比较接口
Java提供了各种排序算法和方法,可以帮助我们对数组、列表或任何集合进行排序。可比较接口是另一种有用的方式,当我们想按照对象的自然顺序排序自定义对象时,可以使用它。例如,它按照字典顺序对字符串进行排序,按照数字顺序对数值进行排序。该接口可在‘java.lang’包中找到。
语法
class nameOfclass implements Comparable<nameOfclass>
compareTo()方法
Comparable接口仅定义了一个名为’CompareTo’的方法,可以被重写以对对象集合进行排序。它允许将类的对象进行比较。当’this’对象等于传递的对象时,返回0,如果’this’对象较大则返回正值,否则返回负值。
语法
compareTo(nameOfclass nameOfobject);
Collections.sort()方法
‘Collections’类是Collection接口的一个静态方法,名为‘Collections.sort()’,它可以对指定集合(如ArrayList或LinkedList)的元素进行排序。它位于‘java.util’包中。
语法
Collections.sort(nameOfcollection);
步骤
- 步骤 1 - 创建一个实现Comparable接口的类’Cart’。在类内部,声明两个变量,并定义一个构造函数,该构造函数具有类型分别为string和double的两个参数’item’和’price’。
-
步骤 2 - 进一步将对象的数据转换为字符串,使用’toString()’方法。然后,定义’compareTo’方法,并将类’Cart’的一个对象作为参数,以比较’this’对象与新创建的对象。
-
步骤 3 - 现在,在main()方法中,声明一个名为’obj’的LinkedHashMap类的对象,并使用内置方法’put()’将对象的详细信息存储到其中。’item’是键,其对应的值是’price’。
-
步骤 4 - 最后,定义一个名为’SrtList’的ArrayList集合,用于存储LinkedHashMap的排序元素。现在,将’obj’作为参数传递给方法’Collections.sort()’,进行按值排序操作。
示例
import java.util.*;
import java.lang.*;
public class Cart implements Comparable<Cart> {
String item;
double price;
Cart(String item, double price) {
// this keyword shows these variables belongs to constructor
this.item = item;
this.price = price;
}
// method for converting object into string
public String toString() {
return "Item: " + item + ", " + "Price: " + price;
}
public String getName() {
// to retrieve item name
return this.item;
}
// overriding method
public int compareTo(Cart comp) {
if(this.price > comp.price) {
return 1;
} else {
return -1;
}
}
public static void main(String[] args) {
// Declaring collection LinkedHashMap
LinkedHashMap<String, Cart> obj = new LinkedHashMap<>();
// Adding object to the obj map
Cart obj1 = new Cart("Rice", 59);
obj.put(obj1.getName(), obj1);
Cart obj2 = new Cart("Milk", 60);
obj.put(obj2.getName(), obj2);
Cart obj3 = new Cart("Bread", 45);
obj.put(obj3.getName(), obj3);
// printing details obj map in unsorted order
System.out.println("Elements of the map: ");
for (String unKey : obj.keySet()) {
System.out.println(obj.get(unKey));
}
List<Cart> SrtList = new ArrayList<>(obj.values());
Collections.sort(SrtList);
// Sorting the object
// printing details of obj map in sorted order
System.out.println("Elements of the newly sorted map: ");
System.out.println(SrtList);
}
}
输出
Elements of the map:
Item: Rice, Price: 59.0
Item: Milk, Price: 60.0
Item: Bread, Price: 45.0
Elements of the newly sorted map:
[Item: Bread, Price: 45.0, Item: Rice, Price: 59.0, Item: Milk, Price: 60.0]
结论
在Java版本1.0中,首次引入了Comparable接口,并在’java.lang’包中提供。在本文中,我们探讨了LinkedHashMap和在排序操作中使用Comparable接口。