Guava学习二(集合、并发、文件)

不可变集合

  1. ImmutableXXX系列,of,copyOf,builder构造
  2. JDK也提供了Collections.unmodifiableXXX方法把集合包装为不可变形式
  3. 所有的Immutable系列均不接受null
  4. 所有的Immutable系列提供ImmutableList方法方面读取集合中内容
//有意思的builder写法
ImmutableSet<Color> GOOGLE_COLORS =
        ImmutableSet.<Color>builder()
            .addAll(WEBSAFE_COLORS)
            .add(new Color(0, 191, 255))
            .build();

新集合类型

  1. MultiSet,ArrayList和Map<T,Integer>混合体,elementSet()不重复元素
    setCount(e,0)等于移除所有e
    实现类:HashMultiSet,ConcurrentHashMultiset
Multiset<Integer> set = HashMultiset.<Integer>create();
  1. MultiMap,单key多值,ListMultimap或SetMultimap接口,它们分别把键映射到List或Set
    实现类:ArraylistMultiMap,HashMultiMap等
HashMultimap<Integer, Integer> map = HashMultimap.create();   
  1. Table<R,C,V>,可以rowMap,row(r)等
    实现类:HashBasedTable(create方法),TreeBasedTable等
// 使用LinkedHashMaps替代HashMaps
    Table<String, Character, Integer> table = Tables.newCustomTable(
    Maps.<String, Map<Character, Integer>>newLinkedHashMap(),
    new Supplier<Map<Character, Integer>> () {
    public Map<Character, Integer> get() {
    return Maps.newLinkedHashMap();
    }
    });

集合工具类

  1. 对应关系,Collections对应Collections2,其余加个s,如Map对应Maps
  2. 提供了静态工厂方法,来初始化集合,通过为工厂方法命名(Effective Java第一条),我们可以提高集合初始化大小的可读性
List<String> theseElements = Lists.newArrayList("alpha", "beta", "gamma");
Set<Type> approx100Set = Sets.newHashSetWithExpectedSize(100);
Multiset<String> multiset = HashMultiset.create();
  1. Iterables、FluentIterable工具类

并发

  1. ListenableFuture可以注册回调
  2. Monitor类,Monitor.Guard完成线程控制
  3. RateLimiter类(RateLimiter.create(4.0)),acquire、tryAcquire

文件读写

  1. Files类read和write\append
  2. 文件hash,HashCode hashCode = Files.hash(file, Hashing.md5());
List<String> readLines = Files.readLines(file,Charsets.UTF_8);

Closer关闭

保证调用Closer.close方法时,所有注册的Closeable对象都正确的关闭

Closer closer = Closer.create();
closer.register(reader);
closer.register(writer);
 catch (Throwable t) {
            throw closer.rethrow(t);
        } finally {
            closer.close();
        }

原文地址:https://www.cnblogs.com/lknny/p/12218752.html

时间: 2024-10-09 22:41:09

Guava学习二(集合、并发、文件)的相关文章

[Google Guava]学习--新集合类型Multimap

每个有经验的Java程序员都在某处实现过Map<K, List<V>>或Map<K, Set<V>>,并且要忍受这个结构的笨拙. 假如目前有个需求是给两个年级添加5个学生,并且统计出一年级学生的信息: public class MultimapTest { class Student { String name; int age; } private static final String CLASS_NAME_1 = "一年级"; pr

Python 学习笔记 - 集合和文件操作

Set 集合 Set是一个无序而且不重复的元素集合.下面看看他有哪些基本功能 创建集合 >>> s1 = {11,22} s2 = set() s3 = set([11,22,33,4]) print(s1,s2,s3) ------------------- {11, 22} set() {33, 11, 4, 22} 把列表转换成集合,注意列表中重复的元素只保留一次 >>> li = [11,22,11,22] s1 = set(li) print(s1) ----

git学习(二)——git的文件状态

git的文件状态 用于查看git的状态 git status 用于git文件的删除操作 git rm 如果只是 git rm --cache 仅删除暂存区里的文件: 如果不加--cache 会删除工作区里的文件 并提交到暂存区 文件检出 git checkout 直接加文件名 从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会选择覆盖; 加了[分支名] +文件名 则表示从分支名为所写的分支名中拉取文件,并覆盖工作区里的文件; 文件状态 新建文件--->Untracked 使用add命令将新

集合与文件操作

今天在云和学院学习了集合和文件操作 ArrayList的添加.移除.清除 string[] strs = { "阳光路上", "如果爱", "玫瑰花的葬礼", "超级英雄" }; string str = "love"; int i = 1; double d = 10.21; float f = 1.2f; ArrayList arraylist = new ArrayList(); arraylist.

Guava学习笔记:guava的不可变集合

Guava学习笔记:guava的不可变集合 不可变集合的意义 不可变对象有很多优点,包括: 当对象被不可信的库调用时,不可变形式是安全的: 不可变对象被多个线程调用时,不存在竞态条件问题 不可变集合不需要考虑变化,因此可以节省时间和空间.所有不可变的集合都比它们的可变形式有更好的内存利用率(分析和测试细节): 不可变对象因为有固定不变,可以作为常量来安全使用. 创建对象的不可变拷贝是一项很好的防御性编程技巧.Guava为所有JDK标准集合类型和Guava新集合类型都提供了简单易用的不可变版本. 

[Guava学习笔记]Collections: 不可变集合, 新集合类型

不可变集合 不接受null值. 创建:ImmutableSet.copyOf(set); ImmutableMap.of(“a”, 1, “b”, 2); public static final ImmutableSet<Color> GOOGLE_COLORS = ImmutableSet.<Color>builder() .addAll(WEBSAFE_COLORS) .add(new Color(0, 191, 255)) .build(); 可以有序(如ImmutableS

多线程编程学习笔记——使用并发集合(三)

接上文 多线程编程学习笔记——使用并发集合(一) 接上文 多线程编程学习笔记——使用并发集合(二) 四.   使用ConcurrentBag创建一个可扩展的爬虫 本示例在多个独立的即可生产任务又可消费任务的工作者间如何扩展工作量. 1.程序代码如下. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Sy

第十二章 并发编程 学习笔记

第十二章 并发编程 进程是程序级并发,线程是函数级并发. 三种基本的构造并发程序的方法: 进程:每个逻辑控制流是个一个进程,由内核进行调度和维护. I/O多路复用:应用程序在一个进程的上下文中显式地调度他们自己的逻辑流. 线程:运行在单一进程上下文中的逻辑流,由内核进行调度. 12.1 基于进程的并发编程 构造并发程序最简单的方法就是用进程. 使用大家都很熟悉的函数例如: fork exec waitpid 关于在父.子进程间共享状态信息:共享文件表,但不共享用户地址空间. 进程又独立的地址空间

Guava学习笔记: guava集合之Multiset

Guava学习笔记: guava集合之Multiset Multiset是什么? Multiset看似是一个Set,但是实质上它不是一个Set,它没有继承Set接口,它继承的是Collection<E>接口,你可以向Multiset中添加重复的元素,Multiset会对添加的元素做一个计数. 它本质上是一个Set加一个元素计数器. Multiset使用示例: package cn.outofmemory.guava.collection; import com.google.common.ba