在Java中使用Comparable接口按值对LinkedHashMap进行排序

2023年 8月 28日 53.6k 0

在Java中使用Comparable接口按值对LinkedHashMap进行排序

LinkedHashMap是一个通用类,用于实现Map接口。此外,它是 HashMap 类的子类,因此它可以使用 HashMap 类的所有方法并执行类似的操作。

Java提供了多种对LinkedHashMap进行排序的方法,我们将通过本文学习如何使用Comparable接口创建它并按其值进行排序。

按值对LinkedHashMap进行排序的程序

在直接跳到排序程序之前,让我们先看一下几个概念 -

LinkedHashMap

正如我们之前讨论的,LinkedHashMap 类扩展了 HashMap 类来实现 Map 接口。它维护键值对。 Key 是一个用于获取和接收与其关联的值的对象。它将映射的元素按照插入的顺序存储在 LinkedList 中,即它维护元素的插入顺序。此外,每当我们返回其元素时,它都会按插入顺序打印。

LinkedHashMap 的一般语法如下 -

语法

LinkedHashMap nameOfMap = new LinkedHashMap();

登录后复制

在上述语法中,

TypeOfKey − 指定键的数据类型。

TypeOfValue − 指定将要存储在映射中的值的数据类型。

nameOfMap − 给你的地图取一个合适的名字。

类似的界面

Java提供了多种排序算法和方法,可以帮助我们对数组、列表或任何集合进行排序。当我们想要按自然顺序对自定义对象进行排序时,可比较接口是一种非常有用的附加方法。例如,它按字典顺序对字符串进行排序,按数字顺序对数字进行排序。该接口在“java.lang”包中可用。

语法

class nameOfclass implements Comparable

登录后复制

compareTo()方法

Comparable 接口仅定义了一个名为“CompareTo”的方法,可以覆盖该方法以对对象集合进行排序。它提供了将类的对象与其自身进行比较的能力。当“this”对象等于传递的对象时,它返回 0,如果“this”对象更大,则返回正值,否则返回负值。

语法

compareTo(nameOfclass nameOfobject);

登录后复制

Collections.sort()方法

集合接口的“Collections”类提供了一个名为“Collections.sort()”的静态方法,可以对指定集合(如 ArrayList 或 LinkedList)的元素进行排序。它在“java.util”包中可用。

语法

Collections.sort(nameOfcollection);

登录后复制

算法

  • 步骤 1 - 创建一个实现Comparable接口的类'Cart'。在类内部,声明两个变量,并定义一个构造函数,该构造函数带有两个参数'item'和'price',分别为字符串和双精度浮点数类型。

  • 第 2 步 - 进一步,我们将使用“toString()”方法将对象的数据转换为字符串。然后,定义“compareTo”方法以及“Cart”类的对象作为参数,以将“this”对象与新创建的对象进行比较。

  • 第三步 - 现在,在main()方法中,声明一个名为'obj'的LinkedHashMap类的'Cart'对象,并使用名为'put()'的内置方法将对象的详细信息存储到其中。'item'是键,其对应的值是'price'。

  • 步骤 4 - 最后,定义一个名为“SrtList”的 ArrayList 集合来存储 LinkedHashMap 的排序元素。现在,将“obj”作为参数传递给“Collections.sort()”方法,以按值执行排序操作。

示例

import java.util.*;
import java.lang.*;
public class Cart implements Comparable {
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 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 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 版本中,首次引入了类似的接口,并在“java.lang”包中提供。在本文中,我们探索了LinkedHashMap以及Comparable接口在排序操作中的使用。

以上就是在Java中使用Comparable接口按值对LinkedHashMap进行排序的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论