Java集合框架--Collection
Java Collection class
Collection是最基本的集合接口,一个Collection代表一组Object。Java SDK不提供直接继承自Collection的类,提供的类都是继承自Collection的子接口(如List和Set)
语法
public interface Collection<E> extends Iterable<E>{}
Collection是一个接口,是高度抽象出来的集合,他包含了集合的基本操作:添加、删除、查找、清空、遍历、大小等。
iterator接口
无论Collection的实际类型是什么,都支持一个iterator()方法,迭代每一个元素。
Iterator方法
boolean hasNext() //如果仍有元素可以迭代,则返回true;
E next() //返回迭代的下一个元素;
void remove() //从迭代器指向的集合中移除迭代器返回的最后一个元素。
Iterator实例
Iterator it = collection.iterator(); //获得一个迭代子
while( it.hasNext() ) {
Object obj = it.next(); //得到下一个元素
}
继承体系
Collection
|—List 有序可重复,可有null值
|——ArrayList 非线程安全,底层为数组,查询快,增删慢,效率高
|——LinkedList 非线程安全,底层为链表,查询慢,增删快,效率高
|——Vector 线程安全,底层为数组,查询快,增删慢,效率低。
|—Set 元素不可重复的collection
|——HashSet 底层由HashMap实现,通过对象的hashCode方法与equals方法来确保插入元素的唯一性,无序存储(存储顺序和取出顺序不一致)
|——LinkedHashSet 底层由哈希表和链表组成。哈希表保证元素的唯一性,链表保证元素的有序性(存储和取出顺序一致)
|——TreeSet 基于TreeMap的NavigableSet实现。使用元素的自然顺序对元素进行排序,根据创建set时提供的Comparator进行排序,元素唯一
总结
- List是一个有序的队列,每一个元素都有它的索引,第一个元素的索引值是0。List的实现类有LinkedList、ArrayList、Vector和Stack;
- Vector类似于ArrayList,但Vector是线程安全的;
- Stack继承自Vector,实现一个后进先出的堆栈;
- set是一个不允许有重复元素的集合;
- 尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。