(译)Java Map集合九问
一般来说,Map就是一个包含一个或多个键值对(Key-Value Pair)的数据结构,而且每一个键(Key)不允许重复出现。本文总结了Java Map九个最常见的问题。为了通用性考虑,我在每一个例子中都使用了泛型。在例子中你可以认为K和V这两个参数都是默认实现了Comparable接口的。 1. 将Map转化为List在Java中,Map接口提供了三种集合视图:key Set, value Se
一般来说,Map就是一个包含一个或多个键值对(Key-Value Pair)的数据结构,而且每一个键(Key)不允许重复出现。本文总结了Java Map九个最常见的问题。为了通用性考虑,我在每一个例子中都使用了泛型。在例子中你可以认为K和V这两个参数都是默认实现了Comparable接口的。 1. 将Map转化为List在Java中,Map接口提供了三种集合视图:key Set, value Se
1. Collection vs Collections首先,”Collection”和”Collections”是两个不同的概念。从下面的层级图你可以看到,”Collection”是集合框架层级图的根元素,但是”Collections”只是一个提供操作集合框架静态方法的工具类。 2. 集合框架类层级图下面一幅图显示了集合框架的类层级图。 3. Map映射的类层级图这是Map映射的类层级图。
下面这些问题是Stackoverflow上面关于Java集合框架提问最多和讨论最多的问题。在你开始看这些问题之前,你最好先看看这些类层级图,以确保你知道它们的关系。 1. 什么时候最好使用LinkedList而不是ArrayList?从某种意义上来说,ArrayList就是数组。它的元素能够直接通过下标访问。但是如果这个数组快占满了,一个新的大的数组需要被分配出来,然后将原来的元素全部拷贝到新的数
1. List链表一览链表,就像它名字说的一样,是一个由各个元素组成的有序序列。当我们谈论链表的时候,将它与集合Set相比较是一个不错的想法。集合Set由一组不重复的元素组成的无序集合。下面的一幅图描述了Java中集合框架的层次关系,通过这幅图你能对集合框架有一个不错的认识。 2. ArrayList vs. LinkedList vs. Vector从这个层次图来说,ArrayList,Lin
Guava中的反射工具类我们很多时候需要在运行时获取相关类的信息,比如它的方法有哪些,它的父类是什么,它的字段有哪些等等。其实这些JDK已经为我们做得很好了,我个人还是比较喜欢欣赏JDK里面做的反射处理的。不过这里为什么要讲Guava里面的反射呢?因为Guava对于JDK做了大量的封装和优化,最简单的比如动态代理,以前我们JDK里面要写一大堆,现在用Guava就能很方便的实现了。下面分别介绍Gua
Guava中的数学数学处理有很多种方式,JDK里面也为我们提供相应的方法,为什么这里我们需要使用Guava里面方法呢?主要由以下几点原因: Guava Math针对各种不常见的溢出情况都有充分的测试;对溢出语义,Guava文档也有相应的说明;如果运算的溢出检查不能通过,将导致快速失败; Guava Math的性能经过了精心的设计和调优;虽然性能不可避免地依据具体硬件细节而有所差异,但Guava
Guava事件总线EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和接口层次结构。 对于观察者模式,我这里就不再赘述了,大家可以去我的另一篇博文《设计模式学习之观察者模式(Observer)》里面详细了解观察者模式。 EventBus使用实例单事件监
Guava哈希算法Java内建的散列码(hash code)概念被限制为32位,并且没有分离散列算法和它们所作用的数据,因此很难用备选算法进行替换。此外,使用Java内建方法实现的散列码通常是劣质的,部分是因为它们最终都依赖于JDK类中已有的劣质散列码。 Object.hashCode往往很快,但是在预防碰撞上却很弱,也没有对分散性的预期。这使得它们很适合在散列表中运用,因为额外碰撞只会带来轻微的
Guava文件IO操作博主认为JDK中属文件IO的操作最麻烦而且最容易出错了,比如什么Stream啊,Reader啊,太多了,时间长了就容易记不住,经常写的话还是OK的,因为很熟练嘛,哈哈!那有没有什么方法能解放我们的文件操作呢?答案是Guava!Guava为我们提供了文件IO的各种工具类,其中使用最多的就是Files。下面我们仔细讨论Files的具体使用方式。 Files使用实例(1) 读文件1
Guava区间Range区间,有时也称为范围,是特定域中的凸性(非正式说法为连续的或不中断的)部分。在形式上,凸性表示对a<=b<=c, range.contains(a)且range.contains(c)意味着range.contains(b)。 Range的表示形式 区间 数学表达式 (a..b) {a < x < b} [a..b] {a <