使用 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 - 為對映提供一個合適的名稱。

Comparable 介面

Java 提供了各種排序演算法和方法,可以幫助我們對陣列、列表或任何集合進行排序。Comparable 介面是一種額外的方式,當我們想要按其自然順序對自定義物件進行排序時很有用。例如,它按字典順序對字串進行排序,按數字順序對數字進行排序。此介面位於“java.lang”包中。

語法

class nameOfclass implements Comparable<nameOfclass>

compareTo() 方法

Comparable 介面僅定義了一個名為“CompareTo”的方法,可以覆蓋該方法以對物件集合進行排序。它賦予了將類的物件與其自身進行比較的能力。當“this”物件等於傳遞的物件時,它返回 0;如果“this”物件大於傳遞的物件,則返回正值;否則返回負值。

語法

compareTo(nameOfclass nameOfobject); 

Collections.sort() 方法

Collection 介面的“Collections”類提供了一個名為“Collections.sort()”的靜態方法,該方法可以對指定集合(如 ArrayList 或 LinkedList)的元素進行排序。它位於“java.util”包中。

語法

Collections.sort(nameOfcollection);

演算法

  • 步驟 1 - 建立一個實現 Comparable 介面的類“Cart”。在其中,宣告兩個變數並定義此類的建構函式以及兩個引數“item”和“price”,型別分別為字串和雙精度浮點數。

  • 步驟 2 - 接下來,我們將使用“toString()”方法將物件的資料轉換為字串。然後,定義“compareTo”方法以及一個作為引數的“Cart”類物件,以將“this”物件與新建立的物件進行比較。

  • 步驟 3 - 現在,在 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<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 介面在排序操作中的使用。

更新於:2023 年 5 月 15 日

319 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告