多语言展示
当前在线:1139今日阅读:84今日分享:32

Java的标准库中缺少任何类型的集合吗?

Java的标准库中缺少任何类型的集合吗?
工具/原料
1

guava

2

IntelliJ IDEA

方法/步骤
1

Guava是一组库,最初由谷歌开发,用于自己的Java项目。它集中于集合、I/O和数学,以及与Apache Commons库的交叉。它可以被看作是数据结构的扩展,这些数据结构包含在Java Collections API中。

2

Guava添加了一个名为Multiset的集合。它使您能够拥有一个允许多个相等元素的集合。Multiset类上的其他方法使您能够计算特定元素的数量,并将其转换为常规集合。

3

与Collections库类似,存在多个多集实现,如HashMultiset、TreeMultiset和ConcurrentHashMultiset。

4

下图显示了正在使用的Multiset。

5

这将保存每个元素的总数。将Multiset看作是该元素与整数之间的映射,以保存计数,这是很有帮助的。虽然以这种方式实现多集的概念是完全可能的,但是Guava实现更强大,因为size方法返回元素计数,而Map实现返回惟一元素的数量。此外,映射上的迭代器只返回每个元素一次,而不管集合中有多少个元素。

6

多目标映射类似于多集映射——在映射中可以有多个键出现。当使用映射对键存储多个值时,常见的模式是存储从键到值列表或值集合的映射。然后,当您试图对某个特定键添加值时,经常会看到以下伪代码:

7

这是脆弱的,容易出错,您还需要确保代码是线程安全的。Guava的 Multimap会帮你搞定的。

8

下图显示了它的使用示例。

9

get方法不返回映射值类型的实例;它返回该类型的集合。

10

multiap与Java的Map接口有几个方面的不同。get方法从不返回null——当获取一个不存在的键时,将返回一个空集合。另一个区别是size方法返回条目的数量,而不是键的数量。

11

与Multiset类似,您可以使用asMap方法将您的multiap转换为Java映射。返回Map>。

12

guava提供的另一种类型的map是BiMap接口。这提供了双向查找:键可以查找值,值也可以查找键。使用Java的Map实现这一点特别棘手;您需要保留两个映射,每个方向一个,并确保一个特定的值永远不会重复,无论它与哪个键相关联。

13

下图显示了一个名称的示例。

14

inverse 是对原始BiMap的引用,因此在原始创建的映射中添加的任何内容都会反映在反向映射中,反之亦然。

推荐信息