- 浏览: 7860140 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
先来看下传统方法建立map,list:
List<String> list = new ArrayList<String>();
Map<String, Integer> map = new HashMap<String, Integer>();
有了guava,则可以简单了:
List<String> list = Lists.newArrayList();
Map<String, Integer> list = Maps.newHashMap();
用到的是lists,maps的工具类
可以这样:
List<Integer> list = Lists.newArrayList(1, 2, 3);
1) 不可变list和map
不可变集合,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。
为什么要用immutable对象?immutable对象有以下的优点:
1.对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象
2.线程安全的:immutable对象在多线程下安全,没有竞态条件
3.不需要支持可变性, 可以尽量节省空间和时间的开销. 所有的不可变集合实现都比可变集合更加有效的利用内存 (analysis)
4.可以被使用为一个常量,并且期望在未来也是保持不变的
immutable对象可以很自然地用作常量,因为它们天生就是不可变的对于immutable对象的运用来说,它是一个很好的防御编程(defensive programming)的技术实践。
创建的方法简单:
ImmutableList<Integer> list = ImmutableList.of(1, 2, 3);
Immutable集合使用方法:
一个immutable集合可以有以下几种方式来创建:
1.用copyOf方法, 譬如, ImmutableSet.copyOf(set)
2.使用of方法,譬如,ImmutableSet.of("a", "b", "c")或者ImmutableMap.of("a", 1, "b", 2)
3.使用Builder类
实例:
@Test
public void testGuavaImmutable(){
List<String> list=new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
System.out.println("list:"+list);
ImmutableList<String> imlist=ImmutableList.copyOf(list);
System.out.println("imlist:"+imlist);
ImmutableList<String> imOflist=ImmutableList.of("peida","jerry","harry");
System.out.println("imOflist:"+imOflist);
ImmutableSortedSet<String> imSortList=ImmutableSortedSet.of("a", "b", "c", "a", "d", "b");
System.out.println("imSortList:"+imSortList);
list.add("baby");
System.out.println("list add a item after list:"+list);
System.out.println("list add a item after imlist:"+imlist);
ImmutableSet<Color> imColorSet =
ImmutableSet.<Color>builder()
.add(new Color(0, 255, 255))
.add(new Color(0, 191, 255))
.build();
System.out.println("imColorSet:"+imColorSet);
}
输出:
list:[a, b, c]
imlist:[a, b, c]
imOflist:[peida, jerry, harry]
imSortList:[a, b, c, d]
list add a item after list:[a, b, c, baby]
list add a item after imlist:[a, b, c]
imColorSet:[java.awt.Color[r=0,g=255,b=255], java.awt.Color[r=0,g=191,b=255]]
2 SortedMap
3 BiMap
就是MAP翻转了
4 Multimap
就是一个键多个值
5 TABLE
当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map<FirstName, Map<LastName, Person>>来实现。为此Guava提供了一个新的集合类型-Table集合类型,来支持这种数据结构的使用场景。Table支持“row”和“column”,而且提供多种视图。
说的简单点,table其实就是:
有行(Row)和列(Column),数据在一个格子(Cell)中。
Table可以是稀疏的。
Table视图:
rowMap()返回一个Map<R, Map<C, V>>的视图。rowKeySet()类似地返回一个Set<R>。
row(r)返回一个非null的Map<C, V>。修改这个视图Map也会导致原表格的修改。
和列相关的方法有columnMap(), columnKeySet()和column(c)。(基于列的操作会比基于行的操作效率差些)
cellSet()返回的是以Table.Cell<R, C, V>为元素的Set。这里的Cell就类似Map.Entry,但是它是通过行和列来区分的。
Table有以下实现:
HashBasedTable:基于HashMap<R, HashMap<C, V>>的实现。
TreeBasedTable:基于TreeMap<R, TreeMap<C, V>>的实现。
ImmutableTable:基于ImmutableMap<R, ImmutableMap<C, V>>的实现。(注意,ImmutableTable已对稀疏和密集集合做了优化)
ArrayTable:ArrayTable是一个需要在构建的时候就需要定下行列的表格。这种表格由二维数组实现,这样可以在密集数据的表格的场合,提高时间和空间的效率。
其中对table很好的介绍见
http://davyjones2010.iteye.com/blog/2094017 一文
List<String> list = new ArrayList<String>();
Map<String, Integer> map = new HashMap<String, Integer>();
有了guava,则可以简单了:
List<String> list = Lists.newArrayList();
Map<String, Integer> list = Maps.newHashMap();
用到的是lists,maps的工具类
可以这样:
List<Integer> list = Lists.newArrayList(1, 2, 3);
1) 不可变list和map
不可变集合,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。
为什么要用immutable对象?immutable对象有以下的优点:
1.对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象
2.线程安全的:immutable对象在多线程下安全,没有竞态条件
3.不需要支持可变性, 可以尽量节省空间和时间的开销. 所有的不可变集合实现都比可变集合更加有效的利用内存 (analysis)
4.可以被使用为一个常量,并且期望在未来也是保持不变的
immutable对象可以很自然地用作常量,因为它们天生就是不可变的对于immutable对象的运用来说,它是一个很好的防御编程(defensive programming)的技术实践。
创建的方法简单:
ImmutableList<Integer> list = ImmutableList.of(1, 2, 3);
Immutable集合使用方法:
一个immutable集合可以有以下几种方式来创建:
1.用copyOf方法, 譬如, ImmutableSet.copyOf(set)
2.使用of方法,譬如,ImmutableSet.of("a", "b", "c")或者ImmutableMap.of("a", 1, "b", 2)
3.使用Builder类
实例:
@Test
public void testGuavaImmutable(){
List<String> list=new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
System.out.println("list:"+list);
ImmutableList<String> imlist=ImmutableList.copyOf(list);
System.out.println("imlist:"+imlist);
ImmutableList<String> imOflist=ImmutableList.of("peida","jerry","harry");
System.out.println("imOflist:"+imOflist);
ImmutableSortedSet<String> imSortList=ImmutableSortedSet.of("a", "b", "c", "a", "d", "b");
System.out.println("imSortList:"+imSortList);
list.add("baby");
System.out.println("list add a item after list:"+list);
System.out.println("list add a item after imlist:"+imlist);
ImmutableSet<Color> imColorSet =
ImmutableSet.<Color>builder()
.add(new Color(0, 255, 255))
.add(new Color(0, 191, 255))
.build();
System.out.println("imColorSet:"+imColorSet);
}
输出:
list:[a, b, c]
imlist:[a, b, c]
imOflist:[peida, jerry, harry]
imSortList:[a, b, c, d]
list add a item after list:[a, b, c, baby]
list add a item after imlist:[a, b, c]
imColorSet:[java.awt.Color[r=0,g=255,b=255], java.awt.Color[r=0,g=191,b=255]]
2 SortedMap
@Test public void whenUsingSortedMap_thenKeysAreSorted() { ImmutableSortedMap<String, Integer> salary = new ImmutableSortedMap .Builder<String, Integer>(Ordering.natural()) .put("John", 1000) .put("Jane", 1500) .put("Adam", 2000) .put("Tom", 2000) .build(); assertEquals("Adam", salary.firstKey()); assertEquals(2000, salary.lastEntry().getValue().intValue()); }
3 BiMap
就是MAP翻转了
@Test public void whenCreateBiMap_thenCreated() { BiMap<String, Integer> words = HashBiMap.create(); words.put("First", 1); words.put("Second", 2); words.put("Third", 3); assertEquals(2, words.get("Second").intValue()); assertEquals("Third", words.inverse().get(3)); }
4 Multimap
就是一个键多个值
@Test public void whenCreateMultimap_thenCreated() { Multimap<String, String> multimap = ArrayListMultimap.create(); multimap.put("fruit", "apple"); multimap.put("fruit", "banana"); multimap.put("pet", "cat"); multimap.put("pet", "dog"); assertThat(multimap.get("fruit"), containsInAnyOrder("apple", "banana")); assertThat(multimap.get("pet"), containsInAnyOrder("cat", "dog")); }
5 TABLE
当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map<FirstName, Map<LastName, Person>>来实现。为此Guava提供了一个新的集合类型-Table集合类型,来支持这种数据结构的使用场景。Table支持“row”和“column”,而且提供多种视图。
@Test public void whenCreatingTable_thenCorrect() { Table<String,String,Integer> distance = HashBasedTable.create(); distance.put("London", "Paris", 340); distance.put("New York", "Los Angeles", 3940); distance.put("London", "New York", 5576); assertEquals(3940, distance.get("New York", "Los Angeles").intValue()); assertThat(distance.columnKeySet(), containsInAnyOrder("Paris", "New York", "Los Angeles")); assertThat(distance.rowKeySet(), containsInAnyOrder("London", "New York")); }
说的简单点,table其实就是:
有行(Row)和列(Column),数据在一个格子(Cell)中。
Table可以是稀疏的。
Table视图:
rowMap()返回一个Map<R, Map<C, V>>的视图。rowKeySet()类似地返回一个Set<R>。
row(r)返回一个非null的Map<C, V>。修改这个视图Map也会导致原表格的修改。
和列相关的方法有columnMap(), columnKeySet()和column(c)。(基于列的操作会比基于行的操作效率差些)
cellSet()返回的是以Table.Cell<R, C, V>为元素的Set。这里的Cell就类似Map.Entry,但是它是通过行和列来区分的。
Table有以下实现:
HashBasedTable:基于HashMap<R, HashMap<C, V>>的实现。
TreeBasedTable:基于TreeMap<R, TreeMap<C, V>>的实现。
ImmutableTable:基于ImmutableMap<R, ImmutableMap<C, V>>的实现。(注意,ImmutableTable已对稀疏和密集集合做了优化)
ArrayTable:ArrayTable是一个需要在构建的时候就需要定下行列的表格。这种表格由二维数组实现,这样可以在密集数据的表格的场合,提高时间和空间的效率。
其中对table很好的介绍见
http://davyjones2010.iteye.com/blog/2094017 一文
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1491方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 1970前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3418info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2190import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 451https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 635public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 560https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 627https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 401https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 4661 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3045微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 561https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1783什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 915本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1269原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 811public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 624在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 886-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 715一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1858介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; 报错,找不到这些类 解决: 要用guava.jar包 Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,...
主要介绍了 java Map转Object与Object转Map实现代码的相关资料,需要的朋友可以参考下
guava-19.0-rc2.jar:不可变对象Guava:ImmutableXXX:Collection、List、Set、Map… (jar包下载)
learn_spring_multi_cache 使用spring cache构建的多级缓存 自由组合切换 guava redis memcache enhance map,充分利用了本地缓存的高效和分布式缓存的共享特性。
使用j2cache就可以简单的实现这种切换,j2cache实现了Map接口可以更友好的切换旧代码,这对于开发人员来说是透明的。 主要特点 针对K-V缓存提供一种扩展的思路,并且统一缓存的访问接口,开发人员可以在系统中灵活的...
在编程领域,缓存是不可或缺的一部分,从处理器到应用层,其...实际上,Caffeine与ConcurrentMap在功能上有许多相似之处,都支持并发操作,且数据的存取时间复杂度为O(1)。然而,二者在数据管理策略上存在显著差异:
在下面,您可以比较使用Gson的LinkedTreeMap加载50,000个事件,将它们转换为LinkedHashMap,guava的ImmutableMap和TinyMap的内存需求,无论对象是否重复使用。有什么缺点吗? 是的。 通过不存储Entry 对象,仅存储...
google-guava-22.0.jar jackson-annotations-2.9.2.jar jackson-core-2.9.2.jar jackson-core-asl-1.9.13.jar jackson-databind-2.9.2.jar jackson-mapper-asl-1.9.13.jar mapstruct-1.2.0.Final.jar spring-plugin-...
流实用程序( , , ): histogram = zip(times, counts).toMap(); 为提供了额外的实用程序: optional(id.length() > 0, id) 字符串在找到一个子字符串: String user = first('@').toEnd().removeFrom(email);...
There are lots of functions to manipulate a Map such as in Guava or Apache Commons, and you should be able to re-use them. Additional Map utilities are provided here. Json addr = new Json() { ...
A Cache 类似于 ConcurrentMap,但不完全相同。 最根本的区别是 ConcurrentMap 保留所有添加到它的元素,直到它们被显式删除。 另一方面,缓存通常配置为自动驱逐条目,以限制其内存占用。 在某些情况下, Loading...
缺点: 未实现Map接口性能问题:所有方法(读/写)都已同步过于简化的API:仅获取/放入难以测试对Java 8不友好##番石榴缓存来自Google的应用缓存( ) 优点: 战斗测试功能齐全(自加载缓存,刷新策略,统计信息......
Redis主要用于缓存,自定义map、guava的缓存也可以用于简单缓存。 自定义缓存时,注意value要使用SoftReference包装,以便JVM回收 guava缓存:CacheBuilder、LoadingCache 1. 数据结构 1. string 2. list 3. hash 4....
Guava-谷歌提供的一组核心Java库,特别使用了Guava Cache JUnit 5-测试框架 怎么跑 生成应用程序,部署它并运行测试。 mvn deploy 运行应用程序 java -jar target/book-library-0.0.1-SNAPSHOT.jar API端点 图书...
LeetCode字符串换行 #Build Status #Features 特征 easy-to-use embedded jetty 8 server ...map ...封装过的本地缓存管理器和接口管理器,使用guava wrapped http client to fetch data 封装过的http
A library to develop ...Map
文章目录概述什么是RedisRedis有哪些优缺点为什么要用 Redis /为什么要用缓存为什么要用 Redis 而不用 map/guava 做缓存?Redis为什么这么快数据类型Redis有哪些数据类型Redis的应用场景持久化什么是Redis持久化?...
数据结构Java 主要数据结构——java中的简单实现如何使用集合:-> JDK(Java集合)-> Guava(谷歌)-> Commons-collections(Apache) 主要抽象数据结构——ADS列表(ArrayList、LinkedList、Vector)栈(FIFO)队列...
使用map reduce方法,对进程进行fork-> search-> reduce以生成结果。 测试用例是基于Guava Cache引擎创建的。 在实际环境中,缓存的内容存储在Memcache中。 这更有效,使用命令“ service memcached restart”清理...