本区域专门总结集合框架类的源码
这个学的时候有必要下载一个图片,有必要一边看图一边理解,我以前看的图找不到了,拿这个来凑数
collection接口的实现类:
(1)####### list
我经常记不住list和set的区别,但是我记得ArrayList,是有顺序并且可以重复,所以set就是没有顺序并且不允许重复。
ArrayList:
Vector:线程安全的,源码上大多数方法都加过Synchronized,既然这样了,肯定造成反应速度慢
stack:后进先出的栈,因为父亲是线程安全的,所以它也是线程安全的。
LinkedList:里面采用双向链表来实现,因此插入和删除比较快
transient Node<E> first;
transient Node<E> last;
(2)####### set 元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定,的,其位置其实是固定的
hashSet:hashset是基于hashmap的,我估计一下它大概是一个key不同,value相同的hashmap。再把这个hashmap的key拿出来念就叫hashset
private transient HashMap<E,Object> map; // Dummy value to associate with an Object in the backing Map private static final Object PRESENT = new Object();
public boolean add(E e) { return map.put(e, PRESENT)==null; }
TreeSet:Treeset是基于treemap的,只不过是key不同但是value 相同的treemap,treeSet是取treemap中的key。换句话说treemap中存的是2个对象,treeSet中存的是1个对象
EnumSet:
(3)####### queue
map接口的实现类:
1.HashMap: 数据结构为数组+链表,属于数组和链表相互退让一步形成的东西。数组中的每一个下标对应的存放的是一个链表,有相同hash的对象存放在一起,用链表串起来。Y轴方向是数组,X轴方向是一个链表。查找的时候,如果key为null,查找Entry[0].如果不是null,先查找key的hashcode,然后经过2次hash,得到hash值(这里我就不知道了,源码也看不出来为什么是2次)。根据hash值找到数组,在得到数组对应位置的index,我就找到了对应的链表,再对链表进行插,删,查。
http://blog.csdn.net/vking_wang/article/details/14166593 这个人文章精辟
#######################hashmap的子类linksdHashmap:
有顺序的hashmap
http://wiki.jikexueyuan.com/project/java-collection/linkedhashmap.html
我的理解是存放到数组里的每一个原始还留了个位置保持他前面一位和后面一位。源码不知道写的什么垃圾东西。
2.TreeMap: 数据结构为数组+红黑树,不过这属于我个人猜想 ,Treemap属于有顺序的二叉树。
http://blog.csdn.net/speedme/article/details/22661671
3.EnumMap:
4.WeakHashmap:
5.ConcurrentHashmap:这个的文章基本看不懂,留到以后吧
Dictionary接口的实现类:
Hashtable:与hashmap基本相同,但是这个是线程安全,并且不允许空键出现。我是这样记的,他的父接口是字典,所以key为空就找不到了,叫字典就没有意思了。
--------- properties: