Java集合源码解析
Java集合源码解析
氵冫丶
这个作者很懒,什么都没留下…
展开
-
TreeSet类源码解析
TreeSet特点 1.内部同时TreeMap实现,TreeMap中的key就是集合的元素,value = new Object() 2.排序规则默认是key自然排序,也可以自定义排序 3.TreeMap内部通过红黑树实现,这个树是二叉树 结点定义如下 static final class Entry<K,V> { K key; V value;原创 2016-07-24 16:41:54 · 1595 阅读 · 0 评论 -
NavigableSet接口源码解析
NavigableSet 为了TreeSet做准备,增加了获取第一个,最后一个,小于x,大于x等节点的操作,以及正向和逆向的迭代器package java.util;public interface NavigableSet<E> extends SortedSet<E> { /** * Returns the greatest element in this set stri原创 2016-07-24 16:32:56 · 1312 阅读 · 0 评论 -
TreeMap类源码解析
TreeMap特点 1.利用红黑树存储结点 2.插入、删除、查找时间复杂度都是O(logn) 3.没有实现同步方法线程不安全 ,效率较高 4.结点可以按照排序输出,默认排序是key值,可以自定义排序方法包package java.util;继承AbstractMap 实现NavigableMap、Cloneable、 java.io.Serializablepublic class原创 2016-07-18 15:51:13 · 886 阅读 · 0 评论 -
NavigableMap接口源码解析
NavigableMap 增加了一些方法用于TreeMappackage java.util;public interface NavigableMap<K,V> extends SortedMap<K,V> { /** * 返回小于key的最大值的结点 * @return an entry with the greatest key less than {@cod原创 2016-07-18 15:03:43 · 1890 阅读 · 0 评论 -
LinkedHashSet类源码解析
LinkedHashSet概述: LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序。 注意,此实现不是同步的。如果多个线程同时访问链接的哈希Set,而其中至少一个线程修改了该Set,则它必须保持外部同步。LinkedHa原创 2016-07-17 16:37:08 · 1189 阅读 · 0 评论 -
HashSet类源码解析
HashSet特点 1.内部通过HashMap实现set的特征,HashMap的key就是集合的元素,value都设置为null 2.几乎就是HashMap 源码如下package java.util;public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Seri原创 2016-07-17 16:17:07 · 1145 阅读 · 0 评论 -
SortedMap接口源码解析
TreeMap的父接口package java.util;public interface SortedMap<K,V> extends Map<K,V> { Comparator<? super K> comparator(); SortedMap<K,V> subMap(K fromKey, K toKey); SortedMap<K,V> headMap(K toKey)原创 2016-07-17 16:08:24 · 1165 阅读 · 0 评论 -
LinkedHashMap类源码解析
LinkedHashMap 1.通过链表实现存储继承HashMap 实现Mappublic class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>成员变量 private static final long serialVersionUID = 3801124242820219131L; /原创 2016-07-17 11:38:43 · 2357 阅读 · 0 评论 -
WeakHashMap类源码解析
WeakHashMap特点 1.内部通过数组实现,和HashMap很类似 2.地址冲突通过链表实现,和HashMap一样 2.当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值 相关包package java.util;import java.lang.ref.WeakReference;import java.lang.ref.ReferenceQueue;继原创 2016-07-17 15:50:15 · 1194 阅读 · 0 评论 -
IdentityHashMap类源码解析
IdentityHashMap 1.内部通过数组存储键值对,相邻元素存在键值对 比如:i 位置是key,i+1位置是value 2.当hashcode相等,出现冲突的时候,通过线性探索发解决冲突问题 3.比较的是引用相等 IdentityHashMap与常用的HashMap的区别是: 前者比较key时是“引用相等”而后者是“对象相等”,即对于k1和k2,当k1==k2时,Identity原创 2016-07-17 15:14:45 · 2446 阅读 · 0 评论 -
AbstractMap抽象类源码解析
实现了Mappackage java.util;import java.util.Map.Entry;/** * AbstractMap */public abstract class AbstractMap<K,V> implements Map<K,V> { /** * 空构造函数 */ protected AbstractMap() { }原创 2016-07-17 14:27:14 · 3709 阅读 · 0 评论 -
EnumMap类源码解析
EnumMap 内部通过数组存在元素 key:表示的是枚举类型,这个类型要一样 用value存储枚举具体的存储值 通过ordinal方法,使得有序存储package java.util;import java.util.Map.Entry;import sun.misc.SharedSecrets;/** * @author Josh Bloch * @see EnumSet *原创 2016-07-17 10:36:29 · 1613 阅读 · 0 评论 -
HashMap类源码解析
HashMap特点: 1.key-value键值对表示一个数据项 2.内部通过数组实现 3.没有实现同步方法,多线程线程不安全,效率较高 4. 所在包package java.util;import java.io.*;继承AbstractMap 实现Map、Cloneable、Serializablepublic class HashMap<K,V> extends原创 2016-07-16 20:27:44 · 1681 阅读 · 0 评论 -
Hashtable类源码解析
Hashtable特点 1.key-value键值对表示一个数据项 2.内部通过数组存储数据 3.实现了同步方法,线程安全,效率低 4.两个重要参数:初始容量(默认11),载入因子(默认0.75)所在包package java.util;import java.io.*;继承Dictionary 实现Map、Cloneable、java.io.Serializablepublic cla原创 2016-07-16 19:23:03 · 1451 阅读 · 0 评论 -
Dictionary抽象类源码解析
Dictionarypackage java.util;public abstractclass Dictionary<K,V> { public Dictionary() { } abstract public int size(); abstract public boolean isEmpty(); abstract public Enumeration<K原创 2016-07-16 16:53:59 · 1225 阅读 · 0 评论 -
Map接口源码解析
Map 每个数据项是key-value数据对 key不能重复 接口内代码比较少,都是基本操作package java.util;public interface Map<K,V> { // Query Operations int size(); boolean isEmpty(); boolean containsKey(Object key); boole原创 2016-07-16 16:50:55 · 1247 阅读 · 0 评论 -
EnumSet抽象类源码解析
EnumSet 专门为枚举类设计的集合类,所有元素必须是枚举类型 EnumSet的集合元素是有序的,内部以位向量的形成存储,因此占用内存小,效率高 不允许加入null元素 源码package java.util;import sun.misc.SharedSecrets;public abstract class EnumSet<E extends Enum<E>> extends Ab原创 2016-07-16 16:39:48 · 1330 阅读 · 0 评论 -
AbstractSet抽象类源码解析
继承AbstractCollection 实现Set 源码如下package java.util;public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> { protected AbstractSet() { } public boolean equals(Ob原创 2016-07-16 15:53:43 · 1292 阅读 · 0 评论 -
Set接口源码解析
Set 无须集合 元素不可以重复 接口内源码和上面其他接口很类似package java.util;public interface Set<E> extends Collection<E> { int size(); boolean isEmpty(); boolean contains(Object o); Iterator<E> iterator(); O原创 2016-07-16 15:50:31 · 921 阅读 · 0 评论 -
SortedSet接口源码解析
SortedSet接口为TreeSet做准备 可以实现排序集合 源码package java.util;public interface SortedSet<E> extends Set<E> { /** * 比较器 */ Comparator<? super E> comparator(); /** * 获取子集 * @throw原创 2016-07-16 16:03:40 · 1270 阅读 · 0 评论 -
Stack类源码解析
Stack 1.通过继承Vector类实现栈功能 2.增加同步方法,线程安全,效率低package java.util;publicclass Stack<E> extends Vector<E> { /** * 创建栈 */ public Stack() { } /** * 入栈 * @return the <code原创 2016-07-16 15:44:10 · 891 阅读 · 0 评论 -
PriorityQueue类源码解析
所在包package java.util;继承AbstractQueue 实现java.io.Serializablepublic class PriorityQueue<E> extends AbstractQueue<E> implements java.io.Serializable {// 内部代码下面讲解}五个变量 private static final long s原创 2016-07-16 15:27:41 · 1732 阅读 · 0 评论 -
ArrayDeque类源码解析
ArrayDeque 1.数组实现双向队列 2.没有实现同步方法,线程不安全,效率较高 3.比LinkedList效率高 4.实现了栈,队列,作为栈使用时候效率比Stack高,作为队列时候比LinkedList效率高通过数组实现双端队列,注意实现的还是循环队列所在包package java.util;import java.io.*;继承AbstractCollection 实现Dequ原创 2016-07-16 14:08:30 · 1534 阅读 · 0 评论 -
AbstractQueue抽象类源码解析
继承Queue 对一些方法增加抛出异常package java.util;public abstract class AbstractQueue<E> extends AbstractCollection<E> implements Queue<E> { /** * 空构造器 */ protected AbstractQueue() { }原创 2016-07-16 09:30:24 · 664 阅读 · 0 评论 -
Deque接口源码解析
Deque 双向队列 队头:可以插入可以删除 队尾:可以插入可以删除 继承Queue接口源码如下:package java.util;public interface Deque<E> extends Queue<E> { /** * 队头插入元素 * * @throws 队列满了添加元素,抛出:IllegalStateException原创 2016-07-16 09:15:37 · 1680 阅读 · 1 评论 -
Queue接口源码解析
队列 先进先出 入队列:offer 出队列:poll 队头元素:peek 继承:Collection抽象类 源码如下:package java.util;public interface Queue<E> extends Collection<E> { /** * 队列插入元素 * * @param e the element to add原创 2016-07-16 09:00:05 · 891 阅读 · 0 评论 -
LinkedList源码解析
LinkedList特点 1.内部通过双向链表存储数据 2.插入、删除不需要移动元素,只需要修改指针所在包package java.util;继承AbstractSequentialList抽象类 实现List、Deque、Cloneable、java.io.Serializablepublic class LinkedListE> extends Abstrac原创 2016-07-15 20:30:44 · 1130 阅读 · 0 评论 -
AbstractSequentialList抽象类源码解析
所在包package java.util;继承AbstractList抽象类public abstract class AbstractSequentialList<E> extends AbstractList<E> {// 内部代码下面讲解}空构造器protected AbstractSequentialList() { }获取指定index位置的元素 这里是通过迭代器获取 /*原创 2016-07-15 19:01:32 · 1289 阅读 · 0 评论 -
ArrayList类源码解析
ArrayList特点: 1.内部通过数组实现 2.删除、插入元素需要大量移动元素 3.默认存储容量是null,需要增加容量时候,默认增加的容量等于原始ArrayList的容量 4.没有实现同步方法,多线程的时候,线程不安全,效率较高 5.存储元素的顺序就说加入集合中的顺序,方便指定index访问元素 所在包package java.util;继承AbstractList抽象类 实现原创 2016-07-15 16:49:54 · 1432 阅读 · 1 评论 -
Vector类源码解析
Vector特点: 1.内部通过数组实现 2.通过synchronized同步方法,线程安全,适合多线程 3.由于线程安全,效率不高 4.默认存放10个元素 所在包package java.util;继承AbstractList 实现List 、RandomAccess、Cloneable、java.io.Serializable Clone: 简单的说就是clone一个对象实例。使原创 2016-07-15 12:26:35 · 1790 阅读 · 0 评论 -
AbstractList抽象类源码解析
所在包package java.util;继续AbstractCollection抽象类 实现List接口public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>{// 内部代码下面讲解}空构造器protected AbstractList() { }添加元素,在尾部添加原创 2016-07-15 11:03:18 · 1399 阅读 · 1 评论 -
List接口源码解析
所在包package java.util;继承Collection接口public interface List<E> extends Collection<E> {// 内部代码下面讲解}集合元素大小int size();是否为空boolean isEmpty();是否包含元素oboolean contains(Object o);转化为数组Object[] toArray();更新数组a<T原创 2016-07-15 10:32:41 · 907 阅读 · 0 评论 -
AbstractCollection抽象类源码解析
所在包package java.util;AbstractCollection抽象类实现Collection接口public abstract class AbstractCollection<E> implements Collection<E>{// 代码下面讲解}默认构造器protected AbstractCollection() { }获得迭代器public abstract原创 2016-07-15 10:04:53 · 629 阅读 · 0 评论 -
Collection接口源码解析
所在包package java.util;继承Iterable类public interface Collection<E> extends Iterable<E> {// 内部代码下面讲解}获得集合内元素的数量 当数量大于Integer.MAX_VALUE时候,只能返回Integer.MAX_VALUE int size();判断集合是否为空 空的时候返回true boole原创 2016-07-15 09:40:31 · 716 阅读 · 0 评论