Collection接口
在Java的类集里面(java.util包)提供了两个最为核心的接口:Collection、Map接口。
Collection是单个集合保存的最大父接口
Collection接口继承树:
Collection接口常用方法:
1. add(E e) : 向集合中添加元素
2. addAll(Collection<? extends E> c) : 向集合中添加一组数据
3. clear() :清空集合数据
4. contains( Object o) : 查找数据是否存在.(需要使用equals()方法).
5. remove( Object o) : 删除数据.(需要使用equals()方法).
6. size() : 取得集合长度
7. toArray() : 将集合变为对象数组返回
8. iterator() : 取得Iterator接口对象,用于集合输出.
在实际开发中,我们很少直接使用Collection接口,往往考虑使用它的子接口:
List(允许数据重复),Set(不允许数据重复)和Queue
下面我们先来看看List接口:
List接口:
List接口提供了两个扩充方法:
- get(int index) : 根据索引取得保存数据
- set(int index,E element) : 修改数据
List本身还是接口,想要取得接口的实例化对象,就必须有子类,在List接口下有三个常用子类:ArrayList, Vector (不常用), LinkedList.
ArrayList和Vector的区别?
- 时间:ArrayList时JDK1.2开始提供的,Vector是从JDK1.0开始提供的.
- 安全性:ArrayList采取异步处理,性能较高,线程不安全,Vector采取同步处理,性能较低,线程安全.
- 输出形式:ArrayList支持Iterator, ListIterator, foreach ,Vector支持Iterator, ListIterator, foreach ,Enumerator.
ArrayList和LinkedList的区别?
- ArrayList基于动态数组实现,LinkedList基于链表实现.
- 对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针,
- 对于添加(add)和删除(remove)操作LinkedList要优于ArrayList,因为ArrayList要移动数据.
Set接口:
Set接口中没有get()方法
在Set接口下有两个常用子类:HashSet(无序存储),TreeSet(有序存储)
1.HashSet
HashSet不能保证元素的排列顺序,不是同步的,集合元素可以是null但是只能放入一个null,
HashSet判断两个元素相等的标准是equals()相等,并且hashCode()返回值相等.
2.TreeSet
TreeSet支持两种排序方式:1.自然排序 2.定制排序.
a.自然排序: 自然排序使用CompareTo(Object obj)方法来比较元素之间大小关系,然后将元素按照升序排列。
obj1.compareTo(obj2)方法,返回0,则说明被比较的两个对象相等,
返回一个正数,则表明obj1大于obj2,返回负数,则表明obj1小于obj2。
b.定制排序: 使用Comparator接口,实现 int compare(To1,To2)方法
Queue
除了Collection接口中基本操作外,Queue还提供了其它的插入、获取和检查操作。
- boolean add(E e) : 插入指定元素, 操作成功返回true.如果当前没有空间可用,抛出一个IllegalStateException
- boolean offer(E e) : 插入指定元素, 操作成功返回true, 失败返回false. (在有容量限制的队列中,这个方法比add()更好.)
- E remove() :检索并删除队列的头部元素,还将它返回队列,为空时抛出异常。
- E poll():检索并删除队列的头部元素,并将它返回,队列为空时返回null。
- E element():检索并返回头部元素,队列为空时,抛出出异常.
- E peek() : 检索并返回头部元素,队列为空时,返回null。
PriorityQueue类
非线程安全, PriorityQueue保存队列元素的顺序并不是按照加入队列的顺序,而是按队列元素的大小重新排序。当调用peek()或者是poll()方法时,返回的是队列中最小的元素。当然也可以自定义排序.