使用Map.Entry Java類

    1.概述

    我們經常使用Map來存儲鍵/值對的集合。然後,在某些時候,我們經常需要遍歷它們。

    在本教程中,我們將比較不同的Map迭代方法,重點介紹何時使用Map.Entry可能會有所幫助。然後,我們將學習如何使用Map.Entry創建元組。最後,我們將創建一個有序的元組列表。

    2.優化Map迭代

    假設我們有一個以作者姓名為關鍵詞的書名地圖:

    Map<String, String> map = new HashMap<>();
    
    
    
     map.put("Robert C. Martin", "Clean Code");
    
     map.put("Joshua Bloch", "Effective Java");

    讓我們比較一下兩種從地圖中獲取所有鍵和值的方法。

    2.1。使用Map.keySet

    首先,請考慮以下幾點:

    for (String key : bookMap.keySet()) {
    
     System.out.println("key: " + key + " value: " + bookMap.get(key));
    
     }

    在這裡,循環遍歷keySet 。對於每個鍵,我們使用Map.get獲得相應的值。儘管這是使用映射中所有條目的一種明顯方式,但它需要為每個條目執行兩項操作-一項操作獲取下一個鍵,而一項操作使用get查找值。

    如果只需要映射中的鍵,則keySet是一個不錯的選擇。但是,有一種更快的方法來獲取鍵和值。

    2.2。 Map.entrySet

    讓我們重寫迭代以使用entrySet

    for (Map.Entry<String, String> book: bookMap.entrySet()) {
    
     System.out.println("key: " + book.getKey() + " value: " + book.getValue());
    
     }

    在此示例中,我們的循環遍歷了Map.Entry對象的集合。由於**Map.Entry將鍵和值存儲在一個類中,因此我們可以在一個操作中同時獲得它們**。

    相同的規則適用於使用Java 8流操作。通過entrySet流傳輸並使用Entry對象更加高效,並且可能需要更少的代碼。

    3.使用元組

    元組是具有固定數量和順序的元素的數據結構。我們可以將Map.Entry視為存儲兩個元素(鍵和值)的元組。但是,由於Map.Entry是一個接口,因此我們需要一個實現類。在本節中,我們將探索JDK提供的一種實現: AbstractMap.SimpleEntry

    3.1。創建一個元組

    首先,考慮Book類:

    public class Book {
    
     private String title;
    
     private String author;
    
    
    
     public Book(String title, String author) {
    
     this.title = title;
    
     this.author = author;
    
     }
    
     ...

    接下來,讓我們創建一個Map.Entry元組,以ISBN作為鍵,並將Book像作為值:

    Map.Entry<String, Book> tuple;
    

    最後,讓我們使用AbstractMap.SimpleEntry實例化元組:

    tuple = new AbstractMap.SimpleEntry<>("9780134685991", new Book("Effective Java 3d Edition", "Joshua Bloch"));
    

    3.2。創建元組的有序列表

    當使用元組時,將它們作為有序列表通常很有用。

    首先,我們將定義元組列表:

    List<Map.Entry<String, Book>> orderedTuples = new ArrayList<>();
    

    其次,讓我們向列表中添加一些條目:

    orderedTuples.add(new AbstractMap.SimpleEntry<>("9780134685991",
    
     new Book("Effective Java 3d Edition", "Joshua Bloch")));
    
     orderedTuples.add(new AbstractMap.SimpleEntry<>("9780132350884",
    
     new Book("Clean Code","Robert C Martin")));

    3.3。與Map比較

    為了將差異與Map進行比較,讓我們添加一個具有已存在鍵的新條目:

    orderedTuples.add(new AbstractMap.SimpleEntry<>("9780132350884",
    
     new Book("Clean Code", "Robert C Martin")));
    

    其次,我們將遍歷列表,顯示所有鍵和值:

    for (Map.Entry<String, Book> tuple : orderedTuples) {
    
     System.out.println("key: " + tuple.getKey() + " value: " + tuple.getValue());
    
     }

    最後,讓我們看一下輸出:

    key: 9780134685991 value: Book{title='Effective Java 3d Edition', author='Joshua Bloch'}
    
     key: 9780132350884 value: Book{title='Clean Code', author='Robert C Martin'}
    
     key: 9780132350884 value: Book{title='Clean Code', author='Robert C Martin'}

    請注意,與基本Map不同,我們可以有重複的鍵,在基本Map ,每個鍵都必須是唯一的。這是因為我們已經使用List實現存儲了SimpleEntry對象,這意味著所有對像都是相互獨立的。

    3.4。 Entry對象列表

    我們應該注意, Entry的目的不是充當通用元組。為此,庫類通常提供通用的Pair類。

    但是,我們可能會發現,在為Map準備數據或從中提取數據時,需要臨時處理條目列表。

    4。結論

    在本文中,我們將Map.entrySet視為迭代Map鍵的替代方法。

    然後,我們研究瞭如何將Map.Entry用作元組。

    最後,我們創建了一個有序元組列表,將差異與基本Map進行了比較。