一、Collection的概念
Collection是一种存储对象的容器,同样的,数组也是一种存储数据的容器。
二、Collection与数组的区别
两者之间的不同之处在于,第一,数组存储的长度是不可变的,而Collection存储的长度是可变的;第二,数组存储的是基本类型数据,而Collection可以存储不同数据类型的对象。第三,Collection是用来存储对象的,而数组不能存储对象。
三、Collection的分类
Collection主要分为有序集合List与无序集合Set,有序集合List可存放相同的数据,且数据的存取是有序的;而无序集合Set不能存放相同的数据,且数据的存取是无序的。Collection有两个子接口,分别是List与Set。
1.有序集合
List是一个有序集合,有序集合可分为LinkedList,ArrayList,Vector以及Stack。
LinkedList是一种链表式结构,具有增删操作快,查询操作慢的特点。
ArrayList是一种数组结构,通过索引来查询数据,具有查询快,增删慢的特点。
Vector是也是一种数据结构,操作是线程同步的,由于考虑到了线程安全问题,效率较ArrayList低下。
Stack是Vector的子类,是一种后进先出的堆栈式结构,也是一种线程安全类,具有Pop,Push,Peek,Search等堆栈操作。
2.无序集合
Set是一个无序集合,无序集合可分为TreeSet,HashSet,LinkedHashSet。
TreeSet是一种树结构,元素是按照顺序排序的,它的remove,add,contains等方法的复杂度都是O(log(n))。
HashSet通过hash表实现,不需要将元素进行排序,对数据的操作比TreeSet高。HashSet是一种线程不安全的类,因为它内部的维护的数据采用的是HashMap,而HashMap是一种线程不安全的数据结构。(如何证明HashSet不是线程安全的?见博客http://blog.csdn.net/micro_hz/article/details/51839246)
LinkedHashSet也是一种哈希结构,介于HashSet与TreeSet之间,同时有一个双向链表来记录插入的顺序,基本方法的复杂度为O(1)。
四、Collection的常用操作
add()——增加元素
remove()——删除元素
clear()——清空所有元素
isEmpty()——判断集合是否为空
contains()——是否含有指定对象
toArray()——把集合转换成数组
五、Map的分类
Map是用来存储键值对的数据结构,常用的有HashMap,TreeMap,HashTable以及LinkedHashMap。
1、 HashMap实现了Map接口,继承了AbstractMap,是一种通过Key快速地存,取Value。HashMap不是线程安全的,它的key和value都可以为null,而且HashMap中的映射不是有序的。
2、TreeMap是基于红黑树实现的,可对数据进行自然排序。HashMap的效率比TreeMap的效率要高,因此不考虑排序的情况下,建议使用HashMap。
3、HashTable与HashMap的不同之处在于HashTable的Key与Value都不能为null,并且HashTable是线程安全的。
4、LinkedHashMap是HashMap的一个子类,通过使用一个双向链表的结构来记录插入的顺序,而LinkedHashMap也不是线程安全的。
六、Map的通用方法
put()——修改map中存在的映射
remove()——删除map中映射
entrySet()——遍历map
containsKey()——查看map中是否存在该键
containsValue()——查看map中是否存在该值
get()——获取map中指定的键所映射的值
keyset()——获取映射中所包含的键的set视图
Values()——获取映射中所包含的指的collection视图