一、集合类
1、集合其实就是存放对象的容器,专业点说就是集合是用了存储和管理其它对象的对象,即对象的容器。集合可以扩容,长度可变,可以存储多种类型的数据,而数组长度不可变,只能存储单一类型的元素。
2、用图来总结哈集合的总况
map
Collection

下面是网上找到的图:

(注:上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,如AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等)

集合中的结构和几个实现类:
有序否 | 是否允许元素重复 | ||
Collection | 否 | 是 | |
List | 是 | 是 | |
Set | AbstractSet | 否 | 否 |
HashSet | 否 | ||
TreeSet | 是(用二叉树排序) | ||
Map | AbstractMap | 否 | 使用key-value来映射和存储数据,key必须唯一,value可以重复。 |
HashMap | 否 | ||
TreeMap | 是(用二叉树排序) |
总述:List、Set、Map是这个集合体系中最主要的三个接口。
其中List/Set继承至Collection接口。Set不允许元素重复,HashSet和TreeSet是两个主要的实现类;List有序且允许元素重复,ArrayList、LinkedList和Vector是三个主要的实现 。
Map也属于集合系统,但是和Collection接口不同,Map是key对value的映射集合,其中key列就是一个集合。Key是不能重复的,但是value是可以重复的,HashMap、TreeMap和Hashtable是三个主要的实现类。
SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。
1、Collection接口:
Collection接口是最基本的集合接口,一个Collection代表一组Object的集合,这些Object被称作为Collection的元素。所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素,后一个构造函数允许用户复制一个Collection。
如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素,典型的用法如下:

这个对于继承或者实现了Collection接口的类都适用。
操作:
单元素添加、删除操作 | boolean add(Object obj):将对象添加给集合 |
boolean remove(Object obj):如果集合中有与obj相匹配的对象,则删除该对象obj。 | |
查询操作 | int size():返回当前集合中元素的数量(长度) |
boolean isEmpty():判断集合中是否有任何元素(是否为空) | |
boolean contains(Object obj):查找集合中是否含有对象obj | |
Iterator iterator();返回一个迭代器(Iterator类型),用来访问集合中的各个元素 | |
组操作:作用于元素组或整个集合 | boolean containsAll(Collection coll):查找集合中是否含有集合coll中所有元素 |
boolean addAll(Collection coll):将集合c中所有元素添加给该集合(批量添加集合) | |
void clear():删除集合中所有元素 | |
void removeAll(Collection coll):从集合中删除集合coll中的所有元素 | |
Void retainAll(Collection coll):从集合中删除集合coll中不包含的元素(也就是说只保留集合coll中的元素) | |
Collection转换为Object数组 | Object[] toArray():返回一个内含集合所有元素的array(数组) |
Object[] toArray(Object[]a):返回一个内含集合所有元素的array。运行期返回的array和参数a的型别相同,需要转换为正确型别。 |

1、List接口:它对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList
ArrayList | 它是一种类似数组的形式进行存储,因此它的随机访问速度极快 |
LinkedList | 它的内部实现是链表,它适合于在链表中间需要频繁插入和删除操作 |
Iterator | 只能对容器进行向前遍历 |
ListIterator | 继承了Iterator的思想,并提供了对List进行双向遍历的方法。 |
2、Set接口:它也是Collection的一种扩展,但又与List不同,在它中的对象元素不允许重复。它常用的具体实现有HashSet和TreeSet类。
HashSet | HashSet能快速定位一个元素,但是你方法哦HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。 |
TreeSet | TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的, |
3、Comparable接口和Comparator接口
在“集合框架”中有两种比较接口:Comparable接口和Comparator接口。像String和Integer等实现Comparable接口以提供一定排序方式,但这样只能实现该接口一次,对于那些没有实现Comparable接口的类、或者自定义的类,您可以通过Comparator接口来定义您自己的比较方式。
Comparable | 在java.lang包中,Comparable接口适用于一个类有自然顺序的时候,假定对象集合是同一个类型,该接口允许您把集合排序成自然顺序。 |
Comparator | 若一个类不能用于实现java.lang.Comparable,或者您不喜欢缺省的Comparable行为并想提供自己的排序顺序(可能多种排序顺序方式),你可以实现Comparator接口,从而定义一个比较器。 |
二、LinkedHashMap与HashMap
1、LinkedHashMap和HashMap都是java.util.Map的实现类。其中LinkedHashMap是HashMap的一个子类。
2、
HashMap | 具有很快的访问速度; |
遍历时,取得数据的顺序是完全随机的; | |
最多只允许一条记录的键位null;允许多条记录的值为null | |
不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。 | |
它的遍历速度与它的容量有关 | |
LinkedHashMap | 遍历时,取得的数据与存入的时候的顺序一致 |
遍历的时候,一般情况比HashMap慢,但是它的遍历速度只是和实际数据有关,与容量无关。 |
http://mmqzlj.blog.51cto.com/2092359/550631
http://www.cnblogs.com/hubingxu/archive/2012/02/21/2361281.html
三、List与ArrayList
1.List是一个接口,而ArrayList是一个类。且ArrayList继承并实现了List类
2.List list=new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List,也就是说list只能使用List的所有对象属性和方法;如果它们的属性和方法都相同的话,则属性调用的是List中的,方法是调用的ArrayList中的;
ArrayList alist=new ArrayList();这句创建了ArrayList的对象,也就是说alist可以使用ArrayList中的特有的方法;
但是在平常使用中的时候,提倡用第一种,因为List有多个实现类。