Guava包学习---I/O】的更多相关文章

Guava包是我最近项目中同事推荐使用的,是google推出的库.里面的功能非常多,包括了集合.缓存.原生类型支持.并发库.通用注解.字符串处理.IO等.我们项目中使用到了guava依赖,但是实际上只是用了其中很小一部分功能,比如集合的声明和处理以及函数式风格等. 废话少说,上图先: 我们会发现里面太多的东西,基本上全部加起来得有数百个上千的类了,但是所经常使用的其实就几十个类.其实可以在项目中建立common-utils包专门抄一部分guava的类过去,而不必全部将guava依赖进来. 工作中…
之前没用过这个EventBus,然后看了一下EventBus的源码也没看明白,(-__-)b.反正大概就是弄一个优雅的方式实现了观察者模式吧.慢慢深入学习一下. 观察者模式其实就是生产者消费者的一个变种,就是一边有变化,然后有一个中介,也就是观察者去告诉消费者说:我说哥们啊,他们那边又变了,咱也跟着变吧! 然后观察者要么就是一个抽象类或者一个接口,里面有个update方法,需要每个处理的实例去实现,然后变化的那方持有这些实例,然后挨个去通知. 所以你也看到了,这个持有操作其实就是很不优雅的操作,…
这段时间用到了ehcache和memcache,memcache只用来配置在tomcat中做负载均衡过程中的session共享,然后ehcache用来存放需要的程序中缓存. Guava中的Cache和ehcache其实差不多,只不过Guava并不会对数据进行持久化落盘这种操作.那其实和Map就比较相似了,你放一下static的map好像也可以办到,只不过Guava的cache支持设置最大占用的内存,已经命中统计信息之类的东西. 这里不从怎么创建一个cache,怎么去添加删除开始学习,我们先看ca…
Maps包方法列表: 还是泛型创建Map: public static <K, V> HashMap<K, V> newHashMap() { return new HashMap<K, V>(); } public static <K, V> HashMap<K, V> newHashMapWithExpectedSize(int expectedSize) { return new HashMap<K, V>(capacity(e…
我们HashMap会有一个rehash的过程,为什么呢?因为java内建的散列码被限制为32位,而且没有分离散列算法和所作用的数据,所以替代算法比较难做.我们使用HashMap的时候它自身有一个rehash的过程,所以我们无需操心.但是如果我们自己离开hashmap的内容,去使用Object.hashCode()就不有可能会比较坑爹了,碰撞处理我们自己去做并不容易.但是,我们可以使用Guava的hash功能. Guava的Hash package底下的内容比较多: 它提供了不同的Hash算的实现…
Guava的I/O平时使用不太多,目前项目原因导致基本上只有在自己写一些文本处理小工具才用得到.但是I/O始终是程序猿最常遇到的需求和面试必问的知识点之一.同时Guava的I/O主要面向是时JDK5和JDK6的时候的设计,现在已经到了JDK8,然而由于懒惰并没有仔细研究这之间的差别,反正就慢慢看吧. Guava提供了一个Files的类,用final修饰了,所以直接用就行了,也不要再想着扩展了,里面的方法很多: 获得一个BufferedReader/bufferedwriter,简单就是从file…
Bimap也是Guava中提供的新集合类,别名叫做双向map,就是key->value,value->key,也就是你可以通过key定位value,也可以用value定位key. 这个场景在日常开发中还是经常碰到的. 其实,Bimap相对比较简单,它是一个接口,扩展了Map接口,里面也是<K,V>格式,只不过它不允许有重复的V,这一点很重要,当你尝试往里面put一个重复的V的是会有报错信息提示.没有重复的V也就保证了你把这个map倒置的时候从V定位K也是可以唯一定位到的,我们可以看…
它和上一章的MultiSet的继承结果很相似,只不过在上层的接口是Multimap不是Multiset. Multimap的特点其实就是可以包含有几个重复Key的value,你可以put进入多个不同value但是相同的key,但是又不是让后面覆盖前面的内容. Guava中有很多multimap的变种,其实就是普通的map变种一样,这里不做详细解释,用的是拿出来就成了.先测试一下multimap的特性: public void testMultimap(){ HashMultimap<Intege…
Sets包的内容和上一篇中的Lists没有什么大的区别,里面有些细节可以看一下: 开始的创建newHashSet()的各个重载方法.newConcurrentHashSet()的重载方法.newTreeSet().newCopyOnWriteArraySet()等都和Lists中的很相似.Sets中有一个不常用的EnumSet,至少不没太使用过这个集合去做事情.EnumSet是Java枚举类型的泛型容器,它的速度据说比HashSet还要快.如果Sets中的值可枚举,那使用这个应该很不错.上个重载…
Table,顾名思义,就好像HTML中的Table元素一样,其实就是行+列去确定的值,更准确的比喻其实就是一个二维矩阵. 其实它就是通过行+列两个key去找到一个value,然后它又containsvalue.containsrow.containscolumn等方法来判断是否包含. 同事put方法也是3个参数:另外你可以通过row()或者column方法得到一列或者一行的一个map<k,v>值. 我感觉这个集合非常有想法,你在处理类似Dom中的二维数组中的值都可以在程序中用这个进行模拟. 具…