Guava Collect

Guava是什么

进入新公司就会接触一些新的东东,Guava就是一个,Guava是Google的一个开源类库,丰富了JDK的API,而且使用起来很方便,本文介绍的是Guava collect包下的一些常用工具类。

项目主页:https://github.com/google/guava

Maven依赖:

<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>

代码演示

List

一般情况下,我们创建一个List集合,使用如下代码:

List<String> strList = new ArrayList<String>();
strList.add("1");
strList.add("2");
strList.add("3");

使用Collections工具类,可以简化:

List<String> strList = new ArrayList<String>();
Collections.addAll(strList, "1", "2", "3");

使用Guava,可以进一步简化:

List<String> strList = Lists.newArrayList("1", "2", "3");

Lists.newArrayList(“1”, “2”, “3”)其实就是对第二步的一个封装,并且这里使用了Java泛型推断,可以看一下源码:

public static <E> ArrayList<E> newArrayList(E... elements) {
    checkNotNull(elements); // for GWT
    // Avoid integer overflow when a large array is passed in
    int capacity = computeArrayListCapacity(elements.length);
    ArrayList<E> list = new ArrayList<E>(capacity);
    Collections.addAll(list, elements);
    return list;
}

JDK7以后,可以去掉实现类中的泛型声明:

List<String> strList = new ArrayList<>;

Oracle也意识到了在等号右面又写一遍泛型是件很2的事情,但是依然不如Guava方便。

不可变List

JDK中有两种创建不可变集合的API,且只能包含一个元素,如下代码:

List<String> strList = Collections.singletonList("1");// 返回一个只包含指定对象的不可变列表
List<String> strList = Collections.emptyList();// 返回空的列表(不可变的)

但通常我们都需要集合中包含多个元素,这两种API特殊情况下可以用到。

Collections还可以创建一个不可变的视图,如下代码:

List<String> strList = new ArrayList<String>();
Collections.addAll(strList, "1", "2", "3");
List<String> unmodifiableList = Collections.unmodifiableList(strList);

unmodifiableList是通过包装可变strList生成,其内部引用的是同一个对象,虽然unmodifiableList是无法改变了,但是strList依然可以改变,如:

strList.add("10");

unmodifiableList也随之变化,所以说这是创建一个不可变的视图

JDK中还可以创建一种只能修改,但不能增加和删除的List,如下代码:

String[] strArray = new String[] {"1", "2", "3"};
List<String> strList = Arrays.asList(strArray);

可以想想,这是由数组决定的特性,这种List实际上就是数组的一个变形,List更方便开发者来使用。

Guava可以创建一个完全不可变的集合,如下代码:

List<String> strList = ImmutableList.of("1", "2", "3");

本文只是对Guava Collect的管中窥豹,也仅仅介绍了List部分,更多请移步:https://github.com/google/guava/wiki

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏浪淘沙

Java学习day06--多态,抽象,接口,匿名内部类

2018.6.9 1.多态 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作。 ...

772
来自专栏Android Note

Java 8之lambda表达式(一)

883
来自专栏水击三千

JavaScript函数(二)

在前面我们已经对函数作了简单的介绍,比如函数的定义、函数的声明、函数的调用和函数的传参等。本节将进一步介绍函数的应用,深度理解函数的各种使用。 函数是一个对象,...

2677
来自专栏菜鸟计划

javascript 函数详解

一、函数的一些基础概念: 1.js中的函数使用function来声明。 2.关于return: 2.1  函数在执行到return语句后悔立即停止并退出,ret...

3054
来自专栏Java技术分享

反射类的方法

关于对类的方法的反射。其中包括静态方法,普通方法,带参数的方法,以及最重要的String[]数组的方法的反射以及需要注意的细节问题,都是基础,所以请各位多多包涵...

1917
来自专栏鸿的学习笔记

Python的浅复制和深复制

在前文已经看到过了可以使用list函数去复制一个列表,这个就是浅复制,浅复制会构建一个新的对象,并且维护之前对象(子对象)的引用,而深复制则是将之前的子对象通过...

954
来自专栏码云1024

c++ 深入理解数组

2536
来自专栏Jed的技术阶梯

图解 Java 数组与内存控制

Java的数组变量是一种引用类型的变量,数组变量并不是数组本身,它只是指向堆内存中的数组对象,改变一个数组变量所引用的数组,可以造成数组长度可变的假象。

1004
来自专栏青枫的专栏

Java中,局部内部类

局部内部类 A:局部内部类可以直接访问外部类的成员。 B:局部内部类在局部位置可以创建内部类对象,通过内部类对象调用内部类方法,来使用局部内部类功能。 ...

673
来自专栏HTML5学堂

JavaScript | 获取数组中的单词并统计出现次数

HTML5学堂(码匠):如何通过JavaScrip实现数组元素的查找?在一个数组当中,找到所有的单词,并统计每个单词出现的次数。 功能需求 在一个自定义数组...

3217

扫码关注云+社区