guava使用(三)--集合类使用

guava使用(三)–集合类使用

一、简介

这一节介绍guava中集合类的使用。

二、准备

2.1 文档官网地址

文档官网地址:https://github.com/google/guava/wiki

2.2 jar包

guava最新的jar包版本为27.1-jre。使用中可添加maven依赖:

<dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>27.1-jre</version>
</dependency>

三、使用

3.1 List列表
3.1.1 Lists

可变列表工具类,方法newArrayList()可以快速创建列表,如

List<String> list = Lists.newArrayList("one", "two", "three", "one", "three");
3.1.2 ImmutableList

不可变列表,使用其方法of()可以快速创建列表,方法copyOf()复制列表, 如:

//快速创建不可变的list
List<String> list = ImmutableList.of("one", "two", "three", "one", "three");
//复制列表
list = ImmutableList.copyOf(list);
3.2 Set集合
3.2.1 Sets

可变集合工具类,如方法newHashSet()可快速创建集合,使用如:

Set<String> set = Sets.newHashSet("one", "two", "three", "one", "three");
3.2.2 ImmutableSet

不可变集合,使用其方法of()可以快速创建列表,方法copyOf()复制列表, 如:

//快速创建不可变的set
Set<String> set = ImmutableSet.of("one", "two", "three", "one");
//复制集合
set = ImmutableSet.copyOf(set);
3.2.3 Multiset

Multiset(工具类为Multisets)为接口,界于jdk中List和Set之间的特性,用于创建可重复无序的集合。

常用实现有:

HashMultiset:重复无序的集合;

TreeMultiset:重复排序的集合;

另外还有其它实现,可查看源码。

使用示例如下:

//创建重复无顺multiset
Multiset<String> multiset = HashMultiset.create();
//添加元素
multiset.add("one");
multiset.add("two");
multiset.add("one");
//查看元素个数
multiset.count("one");
//返回原始set
Set<String> rawSet = multiset.elementSet();
3.3 Map类型
3.3.1 Maps

map的工具类,如方法newHashMap()可创建map,使用如:

Map<String, String> map = Maps.newHashMap(ImmutableMap.of("one", "1", "two", "2"));
3.3.2 ImmutableMap

不可变映射, 方法of()可快速创建映射,如:

//快速创建不可变的map
Map<String, String> map = ImmutableMap.of("one", "1", "two", "2");
3.3.3 BiMap

BiMap为接口,key和value可相互映射,方法inverse()为key和value互换,使用示例如:

//双向映射
BiMap<String, String> biMap = ImmutableBiMap.copyOf(map);
//key和value互换位置
biMap = biMap.inverse();
//创建双向可变map
biMap = HashBiMap.create(map);
biMap.put("one", "1");
3.3.4 Multimap

Multimap(工具类为Multimaps)与Multiset类似,为接口,相同key可以有多个value,常用使用有:
HashMultimap:key-value键值对不可重复;
LinkedHashMultimap: key-value键值对不可重复,且value顺序为添加顺序;
TreeMultimap:key-value键值对不可重复,key和value按会自然或指定排序;
ArrayListMultimap:key-value键值对可重复,使用ArrayList存储value, value顺序为添加的顺序,相同key中的value有序可重复;
LinkedListMultimap:key-value键值对可重复,key和value均有序;
使用示例如下:

//创建HashMultimap,其中key-value值无序且不可重复
Multimap<String, String> hashMultimap = HashMultimap.create();
hashMultimap.put("tow", "2");
hashMultimap.put("one", "first");
hashMultimap.put("one", "1");
hashMultimap.put("one", "first");
//转为常规map
Map<String, Collection<String>> listMap = hashMultimap.asMap();
//获取指定key的value List
List<String> list1 = (List<String>) listMap.get("one");
3.4 Table

Table(工具类Tables)为接口,可从row和column两个方向进行二维索引(区别于Map为一维索引)。常用实现有:

HashBasedTable:key无序;
TreeBasedTable:key会重排序;
使用示例如下:

//类似于HashMap<R, HashMap<C, V>>,创建HashBasedTable
Table<String, String, String> table = HashBasedTable.create();
//添加rowKey,colKey和value
table.put("oneRow", "oneCol", "oneVal1");
table.put("oneRow", "twoCol", "oneVal2");
table.put("twoRow", "twoCol", "oneVal2");

//获取指定rowKey,colKey的value
String val = table.get("oneRow", "oneCol");
//获取指定rowKey的map
Map<String, String> rowMap = table.row("oneRow");
//获取指定colKey的map
Map<String, String> colMap = table.column("oneRow");
//转为row方向的map
Map<String, Map<String, String>> rowMMap = table.rowMap();
//转为col方向的map
Map<String, Map<String, String>> colMMap = table.columnMap();
//获取rowKey集合
Set<String> rowSet = table.rowKeySet();
//获取colKey集合
Set<String> colSet = table.columnKeySet();
3.5 ClassToInstanceMap

Class对象到实例的映射,在一个map中存多种类型实例,使用示例如下:

@Data
static class Stu{
    private String stuName;

    public Stu(String stuName) {
        this.stuName = stuName;
    }
}
@Data
static class School{
    private String schoolName;

    public School(String schoolName) {
        this.schoolName = schoolName;
    }
}
public static void main(String[] args) {
    ClassToInstanceMap clazzMap = MutableClassToInstanceMap.create();
    clazzMap.put(Stu.class, new Stu("apple"));
    clazzMap.put(School.class, new School("banana"));
    Stu stu = (Stu) clazzMap.get(Stu.class);
    School school = (School) clazzMap.get(School.class);
}

四、结尾

上面仅列出来guava中的部分集合操作,更多的可查看源码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值