普通集合类

1:Collection接口:存放单个对象.
-List
- ArrayList
ArrayList是以数组创建,填满的时候扩容是根据1.5+1,不过之前需要跟原数组大
小 +1(minCapacity)比较,以大的为最新数组的容量。
1:缩小容量用trimToSize();
2:对非NULL用equals的方式寻找;
3:非线程安全;

- LinkedList
LinkedList基于双向链表机制实现,一个entry有previous,next指向。查找和删除
都须要遍历链表,非线程安全。

- Vector
Vector跟ArrayList基本原理一样,但在各个方法加了synchronized,所以线程安
全.扩容方法也不同,Vector有一个参数capacityIncrement,
当capacityIncrement>0的时候,扩大为size+capacityIncrement。如果=<0,就扩
大为size的两倍。

- Stack
Stack继承于Vector,在Vector的基础上实现后进先出(LIFO),提供
push,pop,peek(获取最后一个元素).

-Set
Set和List最大的区别是Set不可以放重复的元素,HashSet,TreeSet不支持get(int).
- HashSet
基于HashMap实现,非线程安全。

- TreeSet
基于TreeMap实现,非线程安全,支持排序,可以传入Comparator


2:Map接口:key-value
- HashMap
HashMap是数组与链表的结合体,它有四个属性:
key,value,hash,next.get(key)的时候首先通过key的hashcode查询,然后
用key的equals找到在链表的具体位置。
1:hash算法:hashcode & (lenght-1)取出在数组的位置。数组的长度都是2
的n次方。new hashmap的时候会把数组容量对应到2的N次方;
2:hashmap的三个因素:capacity,loadfactor,threshold;
threshold=capacity*loadfactor(12=16*0.75);当元素超越
threshold的时候会进行扩容resize.resize会重新计算现有元素的位置,
所以比较耗性能,所以当知道多少元素的时候,可以初始它避免resize;如有
1000个元素的时候,0.75*size>1000 和需要是2的N次方,所以size为
2048,new HashMap(2048)
3:对于key为null,会替换之前key为null的value,否则新建,next为第一个
entry.所以get的时候对key为null的总拿第一个进行遍历。
4:非线程安全,可以使用Collections.synchronizedMap。


- TreeMap
1:非线程安全。
2:如果没有传入comparator,root非null,当key为null时候,抛出
nullpointexception
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值