【JavaSE】集合类Collection集合Map集合的简单介绍,List接口,中三个常用子类ArrayList、Vector、LinkedList之间的比较。Set接口。

集合类

集合类就是动态的用数组保存一组对象的信息。在java中数组用的并不多就是因为数组的长度已经固定了,而集合类是动态的,数组长度可以改变。集合类(java.util包)有两大接口分别是:Collection和Map,实现这俩个接口的子类都可以保存对象信息,区别就是Collection是对单个对象进行保存,而Map保存的是一对对象,分别用Key、Value标识。

一、Collection接口

Collection接口的定义是:

public interface Collection<E> extends Iterable<E>

从JDK1.5开始发现Collection接口上追加有泛型应用,这样的直接好处就是可以避免ClassCastException,里面的所有数据的保存类型应该是相同的。在JDK1.5之前Iterable接口中的iterator()方法是直接在Collection接口中定义的。此接 口的常用方法有如下几个:

NO 方法名称 类型 描述
1. public boolean add(E e) 普通 向集合中添加一个数据
2. public boolean addAll(Collection<? extend E> c) 普通 向集合中添加一组数据
3. public void clear() 普通 清空集合中的数据
4. public boolean contains(Object obj) 普通 查找数据是否存在,需要使用equals()方法
5. public boolean remove(Object obj) 普通 删除数据,需要使用equals()方法
6. public int size() 普通 取得集合长度
7. public Object[] toArray() 普通 将集合变为对象数组返回
8. public Iterator iterator() 普通 取得Iterator接口对象,用于集合的输出

以上方法add()和Iterator()方法使用的最多。一般并不会直接使用Collection接口,因为它只是一个存储数据的标准,并不能区分存储类型,例如:数据能否区分可重复和不可重复。所以Collection下面有两个子接口解决了如上问题:List接口(允许数据重复)、Set接口(不允许数据重复)。

1.List接口

在实际开发之中,List接口的使用频率可以达到Collection系列的80%。在进行集合处理的时候,优先考虑List接口。
首先来观察List接口中提供的方法,在这个接口中有两个重要的扩充方法 :

No 方法名称 类型 描述
1. public E get (int index) 普通 根据索引取得保存数据
2. public E set(int index,E element) 普通 修改指定索引下的数据

List提供了一个get扩充方法,可以根据索引取得所保存的数据。由于List本身还是一个接口,要想使用这个方法,还得借助子类实例化对象。在List接口下有三个常用子类:ArrayList、Vector、LinkedList。
先用一张图看一下它们之间的继承关系:
【JavaSE】集合类Collection集合Map集合的简单介绍,List接口,中三个常用子类ArrayList、Vector、LinkedList之间的比较。Set接口。这些子类在使用上比较简单,在这里主要比较一下它们的区别:

子类 内部数据结构 出现时间 性能 线程是否安全
ArrayList 数组实现 JDK1.2 异步处理,性能高 非线程安全
Vector 数组实现 JDK1.0 同步处理,性能低 线程安全
LinkedList 链表实现 JDK1.2 异步处理,性能高 非线程安全

2.Set接口

Set接口与List接口最大的区别就是Set保存的数据不允许重复,而且Set没有对Collection接口进行扩充。
在Set接口中有两个常用子类:HashSet(无序存储)、TreeSet(有序存储)。看一下它们直接的关系图:
【JavaSE】集合类Collection集合Map集合的简单介绍,List接口,中三个常用子类ArrayList、Vector、LinkedList之间的比较。Set接口。可以看到Set的子类也是通过继承抽象类才实现Set的功能的。
既然TreeSet子类可以进行排序,所以我们可以利用TreeSet实现数据的排列处理操作。此时要想进行排序实际上是针 对于对象数组进行的排序处理,而如果要进行对象数组的排序,对象所在的类一定要实现Comparable接口并且覆写 compareTo()方法,只有通过此方法才能知道大小关系
在一般情况下都使用的是HashSet,数据太多的话比较起来很麻烦。

二、Map接口

Collection集合的特点是每次进行单个对象的保存,如果现在要进行一对对象(偶对象)的保存就只能使用Map集合来 完成
首先来观察Map接口定义:

public interface Map<K,V>

Map接口下的重要子类有:HashMap、TreeMap、EnumMap、HashTable。

区别 HashMap HashTable
推出版本 JDK1.2 JDK1.0
性能 异步处理性能高 同步处理性能低
安全性 非线程安全 线程安全
null操作 允许存放null(有且只有一个) key和value都不为null,否则出现NullPointerException

TreeMap性能没有HashMap高,但是它会对保存的数据进行排序,所以一般需要排序的时候才用TreeMap。