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

本文简单介绍下java的集合框架,后续会对对应的源码再做分析。
1、有序集合接口为List,可添加重复元素,实现类有ArrayList、LinkedList、Vector,其中ArrayList是使用数组实现(线程非安全),LinkedList是使用链表实现(线程非安全),Vector是使用数组实现(线程安全);
2、无序集合接口为Set,不可添加重复元素,实现类有HashSet、TreeSet;
3、查找表Map以及实现类HashMap
他们的接口如下图,需要注意的是Map并没有实现Collection接口
1.3java基础部分三:java的集合框架

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接口。
1.3java基础部分三:java的集合框架