集合容器结构图:
java容器类类库的用途是保存对象,分为两个概念,collection和map。collection保存单一的元素,而map保存相关联的键值对。
collection 中基本方法:
int size():获取集合的元素个数
boolean add(E e):向集合中添加元素
boolean remove(Object o):删除给定的元素
boolean isEmpty():判断集合是否不含有元素
void clear():清除集合中所有元素
boolean contains(Object o):集合中是否含有给定元素
boolean addAll(Collection c):将给定集合中的所有元素添加到当前集合
boolean removeAll(Collection c)删除当前集合中与给定集合相同的元素
List list接口在collection的基础上添加了大量的方法,使得可以在list的中间插入和移除元素。
boolean add(int index, E element)
boolean addAll(index, collection)
boolean remove(int index)
set(int index, E element)
get( int index)
subList(int fromIndex, int toIndex)
indexof()
lastIndexof()
listIterator()
当使用contains,indexof,remove时,都会用到equals()方法,对于不同的类,equals的定义是不同的,使用时需注意。
ArrayList 适于随机访问,但插入和删除元素较慢
LinkedList 低价的插入和删除,提供了优化的顺序访问,但在随机访问方面较慢。
除了实现基本的list接口外,还添加了可以使其用作栈,队列,或双端队列的方法,这些方法有的只是名字有差别,有的差别不大,只是为了在特定上下文中更适用。如Queue接口窄化了对LinkedList的方法的访问权限,在方法中的参数类型如果是Queue时,就只能访问Queue接口所定义的方法,而不能直接访问 LinkedList的非Queue的方法。
3. Vector List的实现类还有vector,它与arraylist类似,都是使用数组储存数据,不同的是它可以保证线程安全,但这是需要一定的开销的,并不经常被使用。
stack 栈:可以直接将LinkedList当做栈使用,而不是使用已经过时的stack
LinkedList
boolean empty() 测试堆栈是否为空。
T peek() 查看堆栈顶部的对象,但不从堆栈中移除它。
T pop() 移除堆栈顶部的对象,并作为此函数的值返回该对象。
T push(T item) 把项压入堆栈顶部。
int search(Object o) 返回对象在堆栈中的位置,以 1 为基数。
Queue 队列:LinkedList实现了Queue接口,所以通过LinkedList向上转型为Queue实现
Queue
boolean add(T e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出IllegalStateException。
T element() 获取,但是不移除此队列的头
boolean offer(T e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(T),后者可能无法插入元素,而只是抛出一个异常。
T peek() 获取但不移除此队列的头;如果此队列为空,则返回 null。
T poll() 获取并移除此队列的头,如果此队列为空,则返回 null。
T remove() 获取并移除此队列的头。
set 不保存重复的元素,与collection是完全一样的接口。
treeset将元素存储在红黑树结构中
hashset使用的是散列函数
Map
put()
get()
keySet()返回它的键的set
values()返回它的值的collection
entrySet()返回它的键值对的set
TreeMap:可以按照key值进行排序(红黑树结构)
LinkHashMap:保证map的加入顺序与输出顺序一致
Iterator 迭代器
迭代器的作用是遍历并选择序列中的对象,而客户端程序员不必知道该序列的底层结构。
collections.iterator()得到一个迭代器
iterator.hasNext()
iterator.next()
iterator.remove()在调用此方法之前必须先调用next方法,表示移除最后一个元素。
ListIterator 是Iterator的一个子类,只能用于List类的访问,可以双向移动。
list.listIterator()得到一个迭代器
iterator.hasNext()
iterator.next()
iterator.hasPrevious()
iterator.previous()
iterator.remove()
iterator.set()替换访问过的最后一个元素
iterator.nextIndex()返回迭代器在列表中指向的当前位置的后一个元素的索引
iterator.previous()返回迭代器在列表中指向的当前位置的前一个元素的索引