java中的集合框架是非常重要的,日常开发中基本都会用到。
一、java集合框架主要分为Collection接口的子接口和子接口的实现类,以及Map接口的子接口和子接口的实现类、
二、Collection接口:
1.Collection接口定义了size()、isEmpty()、contains(Object o)、iterator()、add(E e)、remove、contains()等方法。
2.Collection接口主要有List接口、Set接口、Queue接口等几个子接口。
3.这几个接口的区别如下:
- List是有序、允许重复的。
- Set是无序、不允许重复的。
- Quene是从jdk1.5才开始提供。
- 顺便提一下Map,Map为键值对存储。
4.List的子类主要有:ArrayList、LinkedList、Vector等。
区别如下:
- ArrayList是基于动态数组结构的List,LinkedList是基于链表结构的List,Vector是线程安全的List,其实现线程安全的方式是基于同步方法来实现的。
- ArrayList默认初始容量为10,Vector的初始容量也是10,超过此容量,ArrayList扩容当前容量的一半。
- 对于使用get和set随机访问数据而言,ArrayList速度更快些,原因是LinkedList底层是链表结构,要移动指针
- 对于新增和删除操作而言,LinkedList速度更快些,因为ArrayList要移动数据。
5.Set的子类主要有HashSet、TreeSet
主要区别如下:
- HashSet是基于hashMap实现的,TreeSet是基于treeMap实现的。
- HashSet的数据是无序的,允许且只允许有一个值为null,TreeSet的数据是有序的,不允许值为null。
- HashSet放入的对象必须实现hashCode方法,因为要根据对象的hash值判断是否已存在。
三、Map接口
1.Map接口下的实现类主要有HashMap、LinkedHashMap、TreeMap以及Hashtable、ConcurrentHashMap。
主要区别如下:
- HashMap底层使用的是hash算法,是根据key的hash值判断存储的位置。TreeMap是对对象进行比较进行排序存储。
- HashTable是线程安全的HashMap,其实现线程安全的方法是在使用同步方法。ConcurrentHashMap是使用同步代码块来确保线程安全。理论上来说,ConcurrentHashMap速度在多线程情况下会比HashTable速度更快些。LinkedHashMap 是对HashMap是HashMap的一个子类,他保存了HashMap中数据的插入顺序。
- HashMap允许键和值为null,HashTable不允许键和值为null,ConcurrentHashMap也不允许键和值为null。
- HashMap的初始容量为16,HashTable的初始容量为11.负载因子都是0.75.HashMap在扩容时时为左移,HashTable为左移+1;均在达到容量乘以负载因子的时候进行扩容。