Java设计模式之适配器模式

将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原 本由于接口不兼容而不能一起工作的那些类可以一起工作。 —Gang of Four适配器模式将一个类的接口适配成用户所期待的。一个适配器通常允许因为接口不兼容而不能一起工作的类能够在一起工作, 做法是将类自己的接口包裹在一个已存在的类中。适配器模式类图所示是适配器模式的类图。Adapter 适配器设 …… 阅读全文

Java中Queue的使用

Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接口。我们平时使用的一些常见队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻 …… 阅读全文

HashMap实现原理及源码分析

当我们执行如下操作时:HashMap<String, Float> map = new HashMap<String, Float>();map.put("语文", 86.5f);map.put("数学", 93.0f);map.put("英语", 90.0f);对于HashMap而言,采用一种所谓的“Hash算法”来决定每个元素的存储位置。当程序执行 map.put(“语文”, 86.5f) …… 阅读全文

ArrayList和LinkedList的区别

List代表一种线性表的数据结构,ArrayList则是一种顺序存储的线性表。ArrayList底层采用数组来保存每个集合元素,LinkedList则是一种链式存储的线性表。其本质上就是一个双向链表,但它不仅实现了List接口,还实现了Deque接口。也就是说LinkedList既可以当成双向链表使用,也可以当成队列使用,还可以当成栈来使用(Deque代表双端队列,即具有队列的特征,也具有栈的特征 …… 阅读全文

HashSet实现原理及源码分析

HashSet简介HashSet是Set接口实现,它按照Hash算法来存储集合中的元素不保证元素顺序HashSet是非同步的,如果多个线程同时访问一个HashSet,要通过代码来保证其同步集合元素可以是null对于HashSet而言,它是基于HashMap实现的。HashSet底层采用HashMap来保存所有元素,查看HashSet源代码,可以看到如下提示。public c …… 阅读全文

TreeMap实现原理及源码分析

TreeMap是一个有序的key-value集合,基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建时提供的Comparator进行排序、对于TreeMap而言,每个Entry都被当成“红黑树”的一个节点对待,示例如下:public class TreeMapTest { public static void main(String[ …… 阅读全文

TreeSet实现原理及源码分析

类似于HashMap和HashSet之间的关系,HashSet底层依赖于HashMap实现,TreeSet底层则采用一个NavigableMap来保存TreeSet集合的元素。但实际上,由于NavigableMap只是一个接口,因此底层依然是使用TreeMap来包含Set集合中的所有元素。下面是TreeSet类的部分源代码public class TreeSetE> extends A …… 阅读全文

Hashtable实现原理及源码分析

Hashtable简介和HashMap一样,Hashtable也是一个散列表,存储的内容是键值对(key-value)映射。 Hashtable在Java中的定义为:public class HashtableK,V> extends DictionaryK,V> implements MapK,V>, Cloneable, java.io.Serializable从 …… 阅读全文