拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 使用Map.Entry Java类

使用Map.Entry Java类

白鹭 - 2021-11-24 449 0 0

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进行了比较。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *