概述
Java容器类是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。
Java容器主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)
容器的概述图
Collection接口
Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性。Collection包含了List和Set两大分支。
List是一个有序的队列,每一个元素都有它的索引。第一个元素的索引值是0。List的实现类有LinkedList, ArrayList, Vector, Stack。
Set是一个不允许有重复元素的集合。 Set的实现类有HastSet和TreeSet。HashSet依赖于HashMap,它实际上是通过HashMap实现的;TreeSet依赖于TreeMap,它实际上是通过TreeMap实现的。
定义
public interface Collection<E> extends Iterable<E> {}
它是一个接口,是高度抽象出来的集合,它包含了集合的基本操作:添加、删除、清空、遍历(读取)、是否为空、获取大小、是否保护某元素等等。
在Java中所有实现了Collection接口的类都必须提供两套标准的构造函数,一个是无参,用于创建一个空的Collection,一个是带有Collection参数的有参构造函数,用于创建一个新的Collection,这个新的Collection与传入进来的Collection具备相同的元素。
常见API
abstract boolean add(E object)
abstract boolean addAll(Collection<? extends E> collection)
abstract void clear()
abstract boolean contains(Object object)
abstract boolean containsAll(Collection<?> collection)
abstract boolean equals(Object object)
abstract int hashCode()
abstract boolean isEmpty()
abstract Iterator<E> iterator()
abstract boolean remove(Object object)
abstract boolean removeAll(Collection<?> collection)
abstract boolean retainAll(Collection<?> collection)
abstract int size()
abstract <T> T[] toArray(T[] array)
abstract Object[] toArray()
List接口
定义:public interface List<E> extends Collection<E> {}
List是集合中的一种。
List是有序的队列,List中的每一个元素都有一个索引;
第一个元素的索引值是0,往后的元素的索引值依次+1。
List中允许有重复的元素。
常见API
// Collection的API
abstract boolean add(E object)
abstract boolean addAll(Collection<? extends E> collection)
abstract void clear()
abstract boolean contains(Object object)
abstract boolean containsAll(Collection<?> collection)
abstract boolean equals(Object object)
abstract int hashCode()
abstract boolean isEmpty()
abstract Iterator<E> iterator()
abstract boolean remove(Object object)
abstract boolean removeAll(Collection<?> collection)
abstract boolean retainAll(Collection<?> collection)
abstract int size()
abstract <T> T[] toArray(T[] array)
abstract Object[] toArray()
// 相比与Collection,List新增的API:
abstract void add(int location, E object)
abstract boolean addAll(int location, Collection<? extends E> collection)
abstract E get(int location)
abstract int indexOf(Object object)
abstract int lastIndexOf(Object object)
abstract ListIterator<E> listIterator(int location)
abstract ListIterator<E> listIterator()
abstract E remove(int location)
abstract E set(int location, E object)
abstract List<E> subList(int start, int end)
注:实现List接口的集合主要有:ArrayList、LinkedList、Vector、Stack。
Set接口
定义:public interface Set<E> extends Collection<E> {}
Set是一个继承于Collection的接口
Set是一种不包括重复元素的Collection。
它维持它自己的内部排序,所以随机访问没有任何意义。
允许null的存在但是仅有一个。
由于Set接口的特殊性,所有传入Set集合中的元素都必须不同,
实现了Set接口的集合有:HashSet、TreeSet、LinkedHashSet、EnumSet。
Map接口
Map是一个映射接口,即key-value键值对。Map中的每一个元素包含“一个key”和“key对应的value”
在Map中它保证了key与value之间的一一对应关系。也就是说一个key对应一个value,所以它不能存在相同的key值,当然value值可以相同。
实现map的集合有:HashMap、HashTable、TreeMap、WeakHashMap。
Iterator迭代器
遍历集合的工具,即我们通常通过Iterator迭代器来遍历集合。
我们说Collection依赖于Iterator,是因为Collection的实现类都要实现iterator()函数,返回一个Iterator对象。ListIterator是专门为遍历List而存在的。
定义
Iterator是一个接口,它是集合的迭代器。
集合可以通过Iterator去遍历集合中的元素。
public interface Iterator<E> {}
常见API
Iterator提供的API接口,包括:是否存在下一个元素、获取下一个元素、删除当前元素。
abstract boolean hasNext()
abstract E next()
abstract void remove()
注意:Iterator遍历Collection时,是fail-fast机制的。即,当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件。关于fail-fast的详细内容,我们会在后面专门进行说明。
Enumeration
JDK 1.0引入的抽象类。
作用和Iterator一样,也是遍历集合;
Enumeration的功能要比Iterator少。Enumeration只能在Hashtable, Vector, Stack中使用。
Arrays
操作数组的工具类
Collections
操作集合的工具类