一、Collection
列表(List):按照一定次序(对象进入的顺序)排列的对象集,对象之间有次序关系,对象可以重复。
集合(Set):对象唯一,不会重复;元素没有顺序。
队列(Queue):根据排队规则确定对象的顺序。
int size();
boolean isEmpty();
boolean contains(Object o);
Iterator<E> iterator();
Object[] toArray();
boolean add(E o);
boolean remove(Object o);
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c);
boolean removeAll(Collection<?> c);
boolean retainAll(Collection<?> c);
void clear();
boolean equals(Object o);
1、List接口
Collection接口的子接口。
特点:实现该接口的类中的元素有顺序,可重复。
List容器中的元素都有一个对应的整数型的序号(下标),用以记录元素在容器中的位置,可以根据序号取元素。
主要实现类:ArrayList、LinkedList
Collection c = new ArrayList();// ArrayList()是实现collection接口的
Object get(int index);
Object set(int index, Object element);
void add(Object element);
void add(int index,Object element);
Object remove(int index);
int indexOf(Object o);
int lastIndexOf(Object o);
List list = new LinkedList(); LinkedList()是实现list接口的
List<String> list = new LinkedList<String>()//限定容器中只能放String
Vector
List接口的实现类。
特点:跟ArrayList一样,都是可变长的对象数组。
与ArrayList区别
Vector是线程安全的,是可以同步的,运行效率低;
ArrayList不同步,适合于单线程环境中。
public Object elementAt(int index)
public void addElement(Object obj)
public void removeElementAt(int index)
public void insertElementAt(E obj, int index)
public boolean removeElement(Object obj)
public void removeAllElements()
Stack(栈)
extends Vector
特点:LIFO(后进先出)的对象堆栈
主要方法:
public Object push(E item)//增添
public Object pop()//删除
public Object peek()// peek()查看栈顶对象而不移除它
public boolean empty()//判断是否为空
public int search(Object o)//查找
2、Queue(队列)
先进先出
offer():add()(入队)如果可能,将指定的元素插入此队列。
peek(),element():在不移除的情况下返回队头。peek方法在队列为空时返回null,element方法在队列为空时抛出异常。
poll(),remove():移除并返回队头(出队)。poll方法在队列为空时返回null,remove方法在队头为空时抛出异常。
PriorityQueue类
Queue的比较标准的实现类—优先队列
不按元素加入队列的顺序,而是按照元素的大小进行排序
元素大小比较:需实现Comparable接口或者使用comparator
只能放入同一类元素
Deque接口
Queue的子接口—双向队列
实现类 ArrayDeque
主要方法:
addFirst/offerFirst/push 将元素插入双端队列开头
addLast/offerLast将元素插入双端队列尾端
getFirst/PeekFirst 获取但不删除双端队列的第一个元素
getLast/PeekLast获取但不删除双端队列的最后一个元素
removeFirst /pollFirst/pop 获取并删除双端队列的第一个元素
removeLast/pollLast 获取并删除双端队列的最后一个元素
LinkedList类
实现了Deque和List两个接口
可以是队列、栈、链表
3、Set接口
Collection接口的子接口,未提供额外的方法。
理解:实际上Set就是Collection,只是行为不同(继承与多态思想的典型应用:表现不同的行为)。
实现Set接口类的特点:元素无顺序,不重复。
JDK API中Set的实现类
HashSet、TreeSet、LinkedHashSet
hashCode概述
哈希表的原理
Object类中的hashCode()
为何使用hashCode方法?
在元素数量大的情况下,大大提高检索的效率。
只有用到Hashtable、HashMap、HashSet、LinkedHashMap等时才要注意hashcode方法。
对hashCode方法的要求
如果一个类要实现hashCode,必须和equals方法一块实现。hashCode方法和equals方法返回值的关系满足:
equals()为true的两个对象,hashcode()返回值一定相等;
equals()不为true的两个对象,它们的hashCode()不一定相等。即,equals()不为true的两个对象,hashCode()有可能相等。(哈希码在生成的时候可能产生冲突)。
hashCode()不等的两个对象,equals()不为true ;hashCode()相等,equals()可能为true ,也可能不为true 。
二、Map (映射表)
一群成对的对象集,这些对象各自保持着“键-值”(key-value)对应关系。
允许使用一个对象来查找另一个对象。