您的位置:首页 > 编程语言 > Java开发

1.3java基础部分三:java的集合框架

2017-12-22 17:08 375 查看
本文简单介绍下java的集合框架,后续会对对应的源码再做分析。

1、有序集合接口为List,可添加重复元素,实现类有ArrayList、LinkedList、Vector,其中ArrayList是使用数组实现(线程非安全),LinkedList是使用链表实现(线程非安全),Vector是使用数组实现(线程安全);

2、无序集合接口为Set,不可添加重复元素,实现类有HashSet、TreeSet;

3、查找表Map以及实现类HashMap

他们的接口如下图,需要注意的是Map并没有实现Collection接口



ps:

1、虽然Map未实现Collection接口,但也可以认为它是一个 Entry键值对的set集合;

2、HashSet的内部是使用HashMap实现的,只是使用了Map的key列;

3、ArrayList和Vector内部实现逻辑并没有什么区别,他们两个区分是否线程安全的仅仅是Vector在操作元素以及集合内元素数量的时候加了synchronized关键字;

4、ArrayList是用数组实现的,初始长度为10,当添加元素超过数组长度时,数组会扩容,新长度为原长度的1.5倍;

5、HashMap的初始长度为16,有一个装载因子的概念,如果(map内元素个数/map长度)>=装载因子时,map会进行扩容(新长度为原有元素数量的2倍),并ReHash其中所有key;

6、如果需要对一个集合频繁的增删元素,特别是在集合中间增删元素,使用LinkedList的性能优于ArrayList;

7、针对于key相同value不同的两个元素,如何放在同一个map中?

答:原HashMap不支持,但是可以写一个类继承HashMap并重写hashCode()、equals()方法,在计算hashCode值时,添加value计算因子。需要注意的是,这时候如果需要取其中一个元素,那么就不能使用keyset的方式取了,而是要使用entryset取。

8:ArrayList、LinkedList、Vector等集合并不是Object类的子类,其中有hashCode、equals方法来自于collection接口。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息