Guava包学习--Multiset】的更多相关文章

Multiset之前倒是没用过,后来看了下还挺有用,其实它就是支持重复元素的HashSet,相当于list+set的集合,综合了两种集合的优点. 它扩展了Collection: @GwtCompatible public interface Multiset<E> extends Collection<E> {} 先用一下看看: List<String> list = Lists.newArrayList("10", "20",…
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…
它和上一章的MultiSet的继承结果很相似,只不过在上层的接口是Multimap不是Multiset. Multimap的特点其实就是可以包含有几个重复Key的value,你可以put进入多个不同value但是相同的key,但是又不是让后面覆盖前面的内容. Guava中有很多multimap的变种,其实就是普通的map变种一样,这里不做详细解释,用的是拿出来就成了.先测试一下multimap的特性: public void testMultimap(){ HashMultimap<Intege…
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也是可以唯一定位到的,我们可以看…
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中的二维数组中的值都可以在程序中用这个进行模拟. 具…
注意:这文章是2月份写的,拉勾网早改版了,代码已经失效了,大家意思意思就好,主要看代码的使用方法吧.. 最近一直在用且有维护的另一个爬虫是KINDLE 特价书爬虫,blog地址见此: http://www.cnblogs.com/weibaar/p/4824578.html 博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html R语言爬虫初尝试-基于RVEST包学习 Thursday, February 26, 2015 在学完coursera的…
参考链接 Guava库学习:学习Collections(三)Sets…
译者:万天慧(武祖) 由于类型擦除,你不能够在运行时传递泛型类对象——你可能想强制转换它们,并假装这些对象是有泛型的,但实际上它们没有. 举个例子: ArrayList<String> stringList = Lists.newArrayList(); ArrayList<Integer> intList = Lists.newArrayList(); System.out.println(stringList.getClass().isAssignableFrom(intLis…
Guava 已经学习的代码整理 Guava 依赖: compile group: 'com.google.guava', name: 'guava', version: '18.0' 以下是我自己在开发过程中使用到的谷歌 Guava 的一些例子,有些例子看起来确实没什么用,希望各位朋友们不吝赐教. 参考资料: 1.后悔当初的5年<Google Guava学习>专题 2.蓝学网 Guava 教程 3. 创建不可变集合 ImmutableSet<Integer> numbers = I…
全网址           http://ifeve.com/google-guava/ 竹子博客:  http://www.cnblogs.com/peida/archive/2013/06/08/3120820.html 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] .缓存 [caching] .原生类型支持 [primitives support] .并发库 [concurrency libraries] .通用注解…
类图: 其实从类图我们能发现concurrent包(除去java.util.concurrent.atomic 和 java.util.concurrent.locks)中的内容并没有特别多,大概分为四类:BlockingQueue阻塞队列体系.Executor线程组执行框架.Future线程返回值体系.其他各种单独的并发工具等. 首先学习的是Executor体系,是我们处理多线程最常接触的内容.首先我们单独看下继承体系: Executor是顶级接口,里面只有一个方法: public inter…
1首先是sklearn的官网:http://scikit-learn.org/stable/ 在官网网址上可以看到很多的demo,下边这张是一张非常有用的流程图,在这个流程图中,可以根据数据集的特征,选择合适的方法. 2.sklearn使用的小例子 import numpy as np from sklearn import datasets from sklearn.cross_validation import train_test_split from sklearn.neighbors…
Guava Cache与ConcurrentMap很相似,但也不完全一样.最基本的区别是ConcurrentMap会一直保存所有添加的元素,直到显式地移除.相对地,Guava Cache为了限制内存占用,通常都设定为自动回收元素.在某些场景下,尽管LoadingCache 不回收元素,它也是很有用的,因为它会自动加载缓存. 通常来说,Guava Cache适用于: 你愿意消耗一些内存空间来提升速度. 你预料到某些键会被查询一次以上. 缓存中存放的数据总量不会超出内存容量. Guava Cache…
前面刚讲到goroutine和channel,通过goroutine启动一个协程,通过channel的方式在多个goroutine中传递消息来保证并发安全.今天我们来学习sync包,这个包是Go提供的基础包,提供了锁的支持.但是Go官方给的建议是:不要以共享内存的方式来通信,而是要以通信的手段来共享内存.所以他们是提倡使用channel的方式来实现并发控制. 学过Java的同学对锁的概念肯定不陌生,在Java中提供Sychronized关键字提供独占锁,Lock类提供读写锁.在sync包中实现的…
目录 zip Importing & exporting data Plotting with pandas Visual exploratory data analysis 折线图 散点图 panadas hist pdf cdf Statistical exploratory data analysis descripe Separating populations resample() .str.contains() 时区处理方法 导入和处理数据hon drop() 总结 或许可以对比一些…
这个部分我在datacamp上面学习笔记,可视化的性能很差,使用的函数也很少. 可以参考一下大佬的博客园个人感觉他们讲的真的很详细 https://cosx.org/2016/09/r-and-parallel-computing https://blog.csdn.net/quety/article/details/79825615 个人小结: R的底层设计仍是单线程,上层应用包依赖性很强. 并行计算技术正是为了在实际应用中解决单机内存容量和单核计算能力无法满足计算需求的问题而提出的.因此,并…
总算到了 PHP 的拿手好戏上场了,前面我们学习过 Bzip2 . LZF . Phar 和 rar 这些压缩相关扩展在 PHP 中的使用,不过它们要么是太冷门,要么就是很多功能不支持.而 Zip 则是在 PHP 中得到最大幅度功能支持的热门压缩格式,或者说是通用常见的一种压缩格式.当然,也主要得益于 Zip 也是事实上的 Linux 环境中的通用压缩格式. 安装 对于 PHP 来说,Zip 扩展已经集成在了 PHP 的安装包中,在 Configure 的时候可以直接加上 --with-zip…
https://zhuanlan.zhihu.com/p/20637960 java.util jooq guavanettyminajodadubbobatchlucenceactivitiquartz groovy Spark Framework joda https://github.com/jiangxincode/cnblogs/blob/master/J2EE%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF.md Netty lombok Fastjson h…
相信大家对Java中的Map类及其之类有大致的了解,Map类是以键值对的形式来存储元素(Key->Value),但是熟悉Map的人都知 道,Map中存储的Key是唯一的.什么意思呢?就是假如我们有两个key相同,但value不同的元素需要插入到map中去,那么先前的key对应的 value将会被后来的值替换掉.如果我们需要用Map来把相同key的值存在一起,代码看起来像下面一样: @Test public void test1(){ List<Person> personList = n…
在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常流程执行下去.对于可预知的一些数据上的错误,我们一定要做 事前检测和判断,来避免程序流程出错,而不是完全通过错误处理来保证流程正确执行,毕竟错误处理是比较消耗资源的方式.在平常情况下我们对参数的判断都需 要自己来逐个写方法判断,代码量不少并且复用性不高,如下所示: public static void main(String[] args) { getPerson(8,"peida"); getPe…
Ordering是Guava类库提供的一个犀利强大的比较器工具,Guava的Ordering和JDK Comparator相比功能更强.它非常容易扩展,可以轻松构造复杂的comparator,然后用在容器的比较.排序等操作中. 本质上来说,Ordering 实例无非就是一个特殊的Comparator 实例.Ordering只是需要依赖于一个比较器(例如,Collections.max)的方法,并使其可作为实例方法.另外,Ordering提供了链式方法调用和加强现有的比较器. 下面我们看看Orde…
java.lang.NullPointerException,只要敢自称Java程序员,那对这个异常就再熟悉不过了.为了防止抛出这个异常,我们经常会写出这样的代码: Person person = people.find("John Smith"); if (person != null) { person.doSomething(); } 在Java世界里,解决空引用问题常见的一种办法是,使用Null Object模式.这样的话,在“没有什么”的情况下,就返回Null Object,…
今天看到一个抓包笔记, 因为是老早抓包的需求, 后期不用就忘了, 换电脑桌面软件图标都没了, 点开看了一下一脸懵逼... 这是啥...  以后有需要在看一遍吧! Fiddler抓包使用教程-扫盲篇 http://blog.csdn.net/zhaoyanjun6/article/details/72823370 Fiddler简介 http://blog.csdn.net/ohmygirl/article/details/17846199 Fiddler抓包简易教程 https://www.ji…
 一. ListenableFuture是用来增强Future的功能的. 我们知道Future表示一个异步计算任务,当任务完成时可以得到计算结果.如果我们希望一旦计算完成就拿到结果展示给用户或者做另外的计算,就必须使用另一个线程不断的查询计算状态.这样做,不断代码复杂,而且效率低下. ListenableFuture,顾名思义,就是可以监听的Future.我们可以为ListenableFuture增加Listener监听器,当任务完成时,直接执行某个线程,或者我们可以直接为ListenableF…