java容器总结

http://www.cnblogs.com/LipeiNet/p/5888513.html

java容器主要包括两大类 Collection和Map

其中Collection中主要子接口有List、Set、Queue

List的主要特点是顺序存储,可以通过索引操作容器中的元素。该接口导出类为LinkedList和ArrayList,其中ArrayList底层是数组实现,默认长度为10,可自动扩容。特点是查找快(数组实现,索引查找,常数时间复杂度),增删慢(涉及到数组的移动)。LinkedList底层是双链表实现,并且该类实现了栈和队列的数据结构,特点是增删快O(1),查找慢O(n)。

Set的主要特点是无重复元素,其具有跟Collection一样的接口,只是表现行为不同。该接口导出类HashSet(查找快,无序存储),TreeSet(红黑树实现,可根据Comparator策略排序,LinkedHashSet即有查找快的优点,又可以保存存储顺序。)

Queue队列操作,主要API有 poll,peak,offer,remove,element,子类有一个优先队列PriorityQueue,可根据Comparator优先级策略排序。

Map:键值对存储,HashMap:查找快(键值可为null),TreeMap:键排序,LinkedHashMap.....Map三种遍历方式:键集合、值集合、键值对集合。

增强for循环:(遍历数组或者实现了Iterable接口的类,自动默认调用itrator方法遍历)

Iterable it = new Iterable() {
@Override
public Iterator iterator() {
return new Iterator() {
int i=0;
@Override
public boolean hasNext() {
return ++i<100;
}
@Override
public Object next() {
return 1;
}
};
}
};
for(Object i:it){
System.out.println(i);
}

两个重要的工具类Collections和Arrays

Collections.synchronizedList、Arrays.asList都是常用方法



HashMap和Hashtable

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,

主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(Collections.synchronizedMap)。

ArrayList与Vector

1、Vector是多线程安全的,而ArrayList不是,这个可以从源码中看出,Vector类中的方法很多有synchronized进行修饰,这样就导致了Vector在效率上无法与ArrayList相比;

2、两个都是采用的线性连续空间存储元素,但是当空间不足的时候,两个类的增加方式是不同的,很多网友说Vector增加原来空间的一倍,ArrayList增加原来空间的50%,其实也差不多是这个意思,不过还有一点点问题可以从源码中看出,一会儿从源码中分析。

3、Vector可以设置增长因子,而ArrayList不可以,最开始看这个的时候,我没理解什么是增量因子,不过通过对比一下两个源码理解了这个,先看看两个



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值