java集合框架分析

将集合的接口和实现分离,定义有效接口,与实现分离,接口定义了数据结构的规则,实现定义了各种实现;

集合的基本接口是Collection接口,有两个基本方法:add,Iterator;

迭代器方法返回一个实现了迭代器的对象;

迭代器接口中包含了三个方法,E next(); boolean hasNext(); void remove();通过反复的调用next方法来逐个访问集合中的每个元素;使用hasNext来判断是否有下一个来进行遍历;foreach可以 和实现了Iterable的对象进行遍历;而Collection接口扩展了Iterable接口,所以可以标准类库中的集合都可以foreach;

,每一个对象都有一个散列码,还有桶,桶是用来确定取余大小的,也就是哈希长度;如果桶满了的话,为了解决哈希冲突,需要扩展桶的大小,一般有个阈值,比如桶的0.75满了,就直接进行动态增桶,然后将所有数据重新放上去;

所有集合类都在java.util包下,集合类有两个顶级的接口Collection和Map,是根接口;

Collection下有三个实现,Queue,List,Set,队列是一个先进先出,从队头出,从队尾入的有限制的顺序表;List是一个有序的队列,每一个都有它的索引,并且有序,可以有重复的元素,List的实现类有LinkedList,ArayList,Vector,Stack;

Set是一个不允许有重复元素的集合,Set的实现有HashSet和TreeSet,HashSet依赖于HashMap,它实际上是通过HashMap实现的,key存放元素,value存放hash值;TreeSet依赖于TreeMap,其实际上是由TreeMap实现的;

Map是一个key-value形式的映射表,AbstractMap是一个抽象类,HashMap,TreeMap,都继承与AstractMap,Hashtable继承于Dictionary,但它实现了Map接口;

Iterator是遍历工具,使用使用hasNext来判断是否由下一个,Next来遍历,只能单向遍历,并且

链表形式的Iterator,可以双向遍历,并且可以定位元素的位置,ListIterator是专门用来遍历List存在的;

Enumeration是JDK1.0引入的抽象类,作用也是用来遍历集合,但是其功能较少,只能在Hashtable,Vector,Stack上使用;

Arrays和Collecctioins是两个工具集;

ArrayList可以动态扩容,扩容整数倍,可以随机访问,非同步;

LinkedList是一个双向链表,不能随机访问,非同步;

Vector 和ArrayList相似,操作和其几乎一样,但是同步;

Stack,继承于Vector,线程安全;

Set是一种不包含重复元素的集合;

HashSet,使用HashMap实习那不保证元素的顺序;

LinkedHashSet,继承于HashSet,底层基于LinkedHashMap实现的,有序,非同步;

TreeSet,基于TreeMap实现,非线程安全,支持两种有序,自然有序和定制有序,自然有序自然比较,定制有序需要创建

自定义比较;

Map key-value,key不能相同,value可以相同;

HashMap,以hash表实现的Map,查找其位置时使用哈希函数计算其位置,是为了快速查询而设计的,内部定义了一个hash表数组,元素会通过哈希转换函数将元素的哈希地址转化陈数组中存放的索引,如果有哈希冲突,则将有相同hash值的地址串起来,形成链表;

LinkedHashMap,保持着插入顺序,非同步;

TreeMap,基于红黑树实现的Map,有序,非同步;








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值