持有对象
容器类:
容器类结构图:
Collection:独立元素序列
List:按插入顺序保存元素
ArrayList:底层由数组实现,数组长度自增长,每次增长为之前的一半,进行随机访问时效率较高,进行数据的插入/删除时效率低
LinkedList:底层由双链表进行实现,进行随机访问时效率较低,进行数据的插入/删除时效率高。
LinkedList可以通过其方法来实现栈与队列的功能:
栈实现:
public class LinkedListStack<E> {
private LinkedList<E> linkedList = new LinkedList<E>();
//入栈
public void push(E obj){
linkedList.addFirst(obj);
}
//出栈
public E pop(){
return linkedList.removeFirst();
}
//获取栈头信息
public E peek(){
return linkedList.getFirst();
}
public boolean isEmpty(){
return linkedList.isEmpty();
}
}
队列实现(LinkedList本身实现了Queue接口,可直接将其作为队列使用,同时在Java1.6中LinkedList实现了Deque接口支持双端队列)
Set:不能有重复元素
HashSet:使用散列
LinkedHashSet:按照插入顺序保存数据,由链表实现,但查找数据时使用散列
TreeSet:对其中数据进行升序排序,底层由树实现
Queue:按照排队规则进行排序
PriorityQueue:按优先级进行出队列
Map:
HashMap:查找数据时使用散列
内部有一数组,数组中存放的是LinkedList,当调用put()方法时,先获取键值的哈希值作为数组下标,然后将entry放入在该下标下的LinkedList(没有就new一个)。
数组长度有默认值,也可通过构造方法传入
查找时先根据其哈希值找到所在LinkedList然后再在LinkedList上做线性查找
通过其哈希算法获取的哈希值越平均,效率越高
LinkedHashMap:按照插入顺序保存键值,由链表实现,但查找数据时使用散列
TreeMap:使用红黑树实现,对其中数据进行升序排序
迭代器:
迭代器能够屏蔽底层的具体实现来对容器进行遍历
Collection继承了Iterable接口,以至于其子类可通过iterator()获取迭代器
只有实现了Iterable接口的对象才能够用于Java的foreach语法
ListIterator只用于List
注意:
在使用iterator对容器进行遍历时不能够做出修改容器结构的操作(增加/删除),否则会抛出ConcurrentModificationException异常(在调用next()方法时会对容器内对象数量进行检查,若有变化就抛出异常)
Comparable比较所用,进行排序的对象应实现该接口,也可另外提供比较方式
Collections、Arrays为工具类