使用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
進行了比較。