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. 【转载】ASP.NET线程安全与静态变量的生命周期浅谈

    ASP.NET线程安全所涉及的是什么呢?让我们先来看看静态变量的生命周期问题,下面是我理解的静态变量的生命周期: void Application_Start开始 void Application_E ...

  2. [转] NSString / NSMutableString 字符串处理,常用代码

     原文 :  http://justcoding.iteye.com/blog/1405951 Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString , ...

  3. 苹果新政,禁止开发者在App中加入检查更新功能

    今天妥妥的被拒了,苹果更新了新政策,不能在应用中出现检测更新的功能.AppStore会自动提醒用户更新. 去掉更新按钮,之后再尝试下看能通过不能

  4. jsp <%! %> 与 <% %> 区别

    转自huangqiqing123.iteye.com/blog/1922014 <body> <%! //1.可定义方法 public String outMethod(){ ret ...

  5. cocos2d-x 实现粒子飞行特效

    效果图 说明 实现效果: 按下鼠标并且移动, 所到之处产生光圈 光圈会以窗口中心为终点, 并且会偏移自身角度对准终点, 然后持续飞行, 直到终点. 附件 下载源码, 请猛击这里!

  6. 3.5 linux 0.11 目标文件格式

    在Linux0.11系统中,GNU gcc或gas编译输出的目标模块文件和链接程序生成的可执行文件都使用了UNIX传统的a.out格式.这是一种被称为汇编与链接输出(Assembly & li ...

  7. jquery easy ui 学习 (2) customtools window

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. C++学习笔记7——模板

    函数模板: #include <iostream> using namespace std; template <typename T> T max(const T & ...

  9. Windows Live Write 日志客户端

    下载地址 下载地址:http://wl.dlservice.microsoft.com/download/E/4/9/E494934D-C33E-486A-AB1A-82248C800922/zh-c ...

  10. 突然间,对JAVA也找到点感觉了。

    书上没有那段代码,我自己修修补补弄完全了呢.... 就是感觉体系有点宏大,不要急,慢慢玩~!~~ 这个世界很精彩哟~~: QuizCard.java package QuizCard.sky.com; ...