目录
在编写面向对象的程序时,经常要用到一组类型相同的对象。可以使用数组来集中存放这些类型相同的对象,但数组一经定义便不能改变大小。于是,Java集合出现了。
集合指集中存放一组对象的一个容器,提供了保存、获取和操作其他元素的方法。
集合框架由两种类型构成,一个是Collection,另一个是Map。Collection对象用于存放一组对象,Map用于存放一组“关键字/值”(键值对)的对象。Collection和Map是最基本的接口,它们又有子接口,如下所示。
一、集合和数组区别
1.数组的长度固定,集合的长度可变
2.数组可以存放基本数据类型,也可以存放引用数据类型,集合只能存放引用数据类型
3.数组只能存储同一种类型,集合可以存储不同的类型
二、常用方法
实现基本操作的方法有添加元素、删除元素、返回元素的个数、返回迭代器对象。
boolean add(E e):向集合中添加元素e
boolean remove(Object o):从集合中删除指定的元素o
boolean contains(Object o):返回集合中是否包含指定的元素o
boolean isEmpty():返回集合是否为空,即不包含元素
int size():返回集合中包含的元素个数
三、Collection类
Collection类是java.util包中定义的工具类,这个类提供了若干static方法实现集合对象的操作。
1.List接口及实现类
List接口是Collection的子接口,实现一种线性表的数据结构。存放在List中的所有元素都有一个下标(从0开始),可以通过下标访问List中的元素。List中可以包含重复元素。List的实现类包括ArrayList、LinkedList、Vector和Stack。
E get(int index):返回指定下标处的元素
E set(int index,E element):修改指定下标处的元素
void add(int index,E element):将指定元素插入到指定下标处
E remove(int index):删除指定下标处的元素
int indexOf(Object o):查找指定对象第一次出现的位置
int lastIndexOf(Object o):查找指定对象最后一次出现的位置
ArrayList类
ArrayList是List的最常用的线性表实现类,ArrayList类实际上实现了一个变长的对象数组,其元素可以动态地增加和删除。
2.Set接口及实现类
Set接口是Collection的子接口,Set接口对象类似于数学上的集合概念,其中不允许出现重复的元素。Set接口没有定义新的方法,只包含从Collection接口继承的方法。
HashSet类
HashSet类用于散列方法存储元素,具有最好的存取性能。在向Set对象添加元素时,重复的元素不能添加到集合中。它并不保证集合中元素的顺序。
TreeSet类
TreeSet类实现一种树集合,使用红-黑树为元素排序,添加到TreeSet中的元素必须是可以比较的,即元素的类必须实现ComparableK<T>接口。它的操作比HashSet慢。
3.Queue接口及实现类
Queue接口是Collection的子接口,是以先进先出(first in first out,FIFO)的方式排列其元素,一般称为队列。
boolean add(E e):将指定的元素e插入到队列中,失败时抛出异常
E remove():返回队列头元素,同时将其删除,失败时抛出异常
E element():返回队列头元素,但不将其删除,失败时抛出异常
boolean offer(E e):将指定的元素e插入到队列中
E poll():返回队列头元素,同时将其删除,失败时返回空
E peek():返回队列头元素,但不将其删除,失败时返回空
ArrayDeque类和LinkedList类
Deque的常用实现类包括ArrayDeque类和LinkedList类,前者是可变数组的实现,后者是线性表的实现。LinkedList类比ArrayDeque类更灵活,实现了线性表的所有操作,其中可以存储null元素,但ArrayDeque对象不能存储null。
四、Map接口及实现类
Map是用来存储键值对的对象。在Map中存储的关键字和值都必须是对象,并要求关键字是唯一的,而值可以重复。
public V put(K key,V value):向映射对象中添加一个键值对
public V get(Object key):返回指定键的值
public V remove(Object key):从映射中删除指定键的键值对
public boolean containsKey(Object key):返回映射中是否包含指定的键
public boolean containsValue(Object value):返回映射中是否包含指定的值
public int size():返回映射中包含的键值对个数
public boolean isEmpty():返回映射是否为空
Map接口的常用实现类有HashMap、TreeMap和Hashtable类
HashMap类以散列方法存放键值对;TreeMap类实现了SortedMap接口,保证Map中的键值对按关键字升序排序;Hashtable类是Java早期版本提供的一个存放键值对的实现类,实现了一种散列表,也属于集合框架。Hashtable类的方法都是同步的,因此它的线程是安全的。