Guava是什么

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

项目主页:https://code.google.com/p/guava-libraries/

源代码下载(GIT):git clone https://code.google.com/p/guava-libraries/

Maven依赖:

<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>17.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://code.google.com/p/guava-libraries/wiki/GuavaExplained?tm=6

本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/27962647。转载请注明。

Guava Collect的更多相关文章

  1. Guava 3: 集合Collections

    一.引子 Guava 对JDK集合的拓展,是最成熟且最受欢迎的部分.本文属于Guava的核心,需要仔细看. 二.Guava 集合 2.1 Immutable Collections不可变集合 1.作用 ...

  2. kafka+storm+hbase

    kafka+storm+hbase实现计算WordCount. (1)表名:wc (2)列族:result (3)RowKey:word (4)Field:count 1.解决: (1)第一步:首先准 ...

  3. spark机器学习从0到1基本的统计工具之(三)

      给定一个数据集,数据分析师一般会先观察一下数据集的基本情况,称之为汇总统计或者概要性统计.一般的概要性统计用于概括一系列观测值,包括位置或集中趋势(比如算术平均值.中位数.众数和四分位均值),展型 ...

  4. Guava学习笔记(4):Ordering犀利的比较器

    转自:http://www.cnblogs.com/peida/p/Guava_Ordering.html Ordering是Guava类库提供的一个犀利强大的比较器工具,Guava的Ordering ...

  5. Guava学习笔记(3):复写的Object常用方法

    转自:http://www.cnblogs.com/peida/p/Guava_Objects.html 在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals ...

  6. Guava学习笔记:Google Guava 类库简介

    http://www.cnblogs.com/peida/tag/Guava/ Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, cachin ...

  7. 使用Guava提供的filter过滤集合

    正常情况下,我们声明一个List需要如下代码 List<String> list = new ArrayList<>(); list.add("AAA"); ...

  8. Guava学习笔记:Guava新集合-Table等

    Table 当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map<FirstName, Map<LastName, Person>>来实现.为此Guava ...

  9. Guava学习笔记:Ordering犀利的比较器

    Ordering是Guava类库提供的一个犀利强大的比较器工具,Guava的Ordering和JDK Comparator相比功能更强.它非常容易扩展,可以轻松构造复杂的comparator,然后用在 ...

随机推荐

  1. J2EE初探

    J2EE概述 3层结构 4层模型 13项核心技术 J2EE容器 J2EE的优势与缺陷   J2EE概述 Java 2平台有3个版本,分别是适用于小型设备和智能卡的Java 2平台Micro版(Java ...

  2. (转)PHP自定义遍历目录下所有文件dir(),readdir()函数

    方法一:使用dir()遍历目录 dir()函数,成功时返回Directory类实例 PHP dir() 语法格式为: dir(directory);//directory为需要显示文件名的目录名称,可 ...

  3. android Editview中加小图标或者文字实现

    关于这个问题,如果只是加小图标的话,已经提供了很好的支持,drawableLeft属性就可以设置左边的小图标,类推,右边也可以 不过如果你要加的是文字,我找了下,没有相应的属性,我们只能通过转换思路去 ...

  4. [javascript]event属性

    1.clientX和clientY clientX和clientY是事件发生时,鼠标离浏览器可视文档区域左上角的位置 2.offsetX和offsetY offsetX和offsetY是事件发生时,鼠 ...

  5. Python自动化运维之14、设计模式

    设计模式是什么? 设计模式是经过总结.优化的,对我们经常会碰到的一些编程问题的可重用解决方案.一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码.反之,设计模式更为高级,它是一种必须在特定情 ...

  6. 死亡的协议--- Pieter Hintjens (ZeroMQ作者)

    过去几年中用zeromq写过几个系统系统.对ZeroMQ强大和灵活印象非常深刻.在阅读zeromq guide文档时候.发现作者整理各种通信模式非常经典和实用,可以作为分布式通信的教科书来看.第一次见 ...

  7. [Struts2学习笔记] -- 自定义类型转换

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  8. HDU-2054 A==B?

    #include<stdio.h>#include<string.h>char n[100000], m[100000];int main(){ int i, j, len_n ...

  9. bzoj3576: [Hnoi2014]江南乐

    Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏.    游戏的规则是这样的,首先给定一 ...

  10. keil C51绝对地址访问

    在利用keil进行8051单片机编程的时,常常需要进行绝对地址进行访问.特别是对硬件操作,如DA AD 采样 ,LCD 液晶操作,打印操作.等等.C51提供了三种访问绝对地址的方法: 1. 绝对宏 在 ...