1.Collection
public interface Collection<E> extendsIterable<E>
Set,Queue和List 都继承了Collection。Map没有。
Collection接口的方法:
boolean add(Object o) :向集合中加入一个对象的引用
void clear() :删除集合中所有的对象,即不再持有这些对象的引用
boolean isEmpty() :判断集合是否为空
boolean contains(Object o): 判断集合中是否持有特定对象的引用
Iterartor iterator() : 返回一个Iterator对象,可以用来遍历集合中的元素
boolean remove(Object o) :从集合中删除一个对象的引用
int size() :返回集合中元素的数目
Object[] toArray() :返回一个数组,该数组中包括集合中的所有元素
boolean java.util.Collection.addAll(Collection<? extends E> c)
求this与c的并集,然后保存在this对象中。若求交集过程中this对象的集合数据有变化,返回true。
boolean java.util.Collection.retainAll(Collection<?> c)
求this与c的交集,然后保存在this对象中。若求交集过程中this对象的集合数据有变化,返回true。
boolean java.util.Collection.removeAll(Collection<?> c)
求this与c的差集,this-c,然后保存在this对象中。若求交集过程中this对象的集合数据有变化,返回true。
Collection的toString()方法生成可读性很好的字符串,[e1,e2,...,en]
2.List
public interface List<E> extends
Collection<E>
实现类:
ArrayList : 变长数组。相邻元素内存地址也相邻,可以对元素进行随机的访问,插入与删除元素的速度慢。
LinkedList: 链表数组。插入和删除速度快,访问速度慢。
常用方法:
<T> T[] java.util.List.toArray(T[] a)
这个方法很变态。List本身就是一个泛型接口,好好的<E>不用,非得转换成函数中的泛型T。此函数的行为依赖于实现类,以ArrayList为例,a长度与内部实现是相关的,见图1.
图1 ArrayList.toArray()函数实现
Object[] java.util.List.toArray()
返回的是Object。
E java.util.List.set(int index, E element)
将第i个元素替换成新元素。
void java.util.List.add(int index, E element)
将元素插入到第i个位置上。
int java.util.List.indexOf(Object o)
返回元素o第一次出现的位置。若没有,返回-1。
List<E> java.util.List.subList(int fromIndex, int toIndex)
返回子列表。
3.Queue
public interface Queue<E> extends
Collection<E> {}
boolean java.util.Queue.add(E e)
在队列尾部添加指定元素。
E java.util.Queue.element()
返回队列头部的元素,但并不从队列中删除该元素,当队列为空时此方法会抛出异常。
E java.util.Queue.peek()
返回队列头部的元素,但并不从队列中删除该元素,当队列为空时此方法返回null,不抛异常。
E java.util.Queue.remove()
返回队列头部的元素,并从队列中删除该元素,当队列为空时此方法会抛出异常。
E java.util.Queue.poll()
检索并删除元素,队列为空时返回null,不抛异常。
实现类:
LinkedList。
双端队列:public interface Deque<E> extends Queue<E>{} 详见:http://blog.csdn.net/chuchus/article/details/43307717
优先队列:public class PriorityQueue<E> extends AbstractQueue<E> 详见:http://blog.csdn.net/chuchus/article/details/43307485
4.Set
public interface Set<E> extends
Collection<E>{}
Set是最简单的一种集合。没有重复元素。不能按下标来取,只能通过iterator访问元素。
add(Object o)方法,若待添加的元素已在集合中,返回false。
实现类:
HashSet : 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。
TreeSet : 保存自然次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。
LinkedHashSet : 具有HashSet的查询速度,存入LinkedHashSet的对象必须定义hashCode()。内部使用链表维护元素的插入次序。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
set详细内容移步: http://blog.csdn.net/chuchus/article/details/41659509
5.Map
public interface Map<K,V>
存放多组键值对。
V java.util.Map.put(K key, V value)
添加指定的键值对。若K 已存在,新的value会覆盖旧的。返回值为此key对应的旧的value,显然没有旧的对应关系时返回null。
V java.util.Map.get(Object key)
通过Key获得Value。若key不存在返回null。
Set<K> java.util.Map.keySet()
返回键的集合。
Collection<V> java.util.Map.values()
返回值的集合。
boolean java.util.Map.containsKey(Object key)
略。
boolean java.util.Map.containsValue(Object value)
略。
void java.util.Map.clear()
略。
boolean java.util.Map.remove(Object key, Object value)
删除已有的键值对。
toString()生成的结果格式形如: {a=1,b=2,...,z=26}
5.1实现类
java.util.TreeMap
红黑树实现。需要实现Comparable接口。最好同时重写equals()方法。TreeMap可以按照元素间从小到大的顺序遍历。
java.util.HashMap
基于哈希表实现。使用HashMap,需要同时重写hashCode()和equals()方法。比起其他Map的实现类,它的查找速度最快。
java.util.LinkedHashMap
它是HashMap的子类。LinkedHashMap可以按照元素的插入顺序遍历。详见:http://blog.csdn.net/chuchus/article/details/51986716
5.2 遍历
5.3 Map.Entry<K,V>
在Map接口内部还有一个接口: interface Entry<K,V> {...},用来存储键值对。
它的实现类也都是相应Map实现类的内部类,不方便直接用。可以尝试自己实现一个类:
6.Abstract
public abstract class AbstractList<E> extends AbstractCollection <E> implements List<E>
public abstract class AbstractQueue<E> extends AbstractCollection <E> implements Queue<E> {}