集合接口:
java类库将集合的接口和实现分离。队列的实现:循环数组和链表;前者更高效,后者没有上限。
AbstractQueue类用于用户自己实现队列类。
cllection(extends Iterable<E>)接口:基本方法1.add 2 iterator(next;hasnext;remove)
Collection<E> coll=new Collection<>();
Iterator<String> iter=coll.iterator();
while (iter.hasNext()){
String a = iter.next();
do something with a......
}
增强for循环(要求实现了iterable接口):
for(string a in c){do something with a......}
iterable接口:iterator方法返回一个实现Iterator接口的对象;
iterator接口:hasnext,next,remove方法
1将迭代器视为位于两个元素之间。2必须先next,再remove
ohter methods:contains.......
AbstractCollection类实现了Collection接口:让实现Collection接口更加方便,除了iterator和size被抽象化,contains以及其他方法都提供了例行方法。
除了以map结尾的(实现map接口),其他集合都实现clloctive接口
具体的集合:
链表:
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, Serializable
ListItertor迭代器:
有序集合,使用迭代器添加元素。interface ListItertor<E> extends Iterator<E>{void add(E element); E previous(); boolean hasprevious();(反向遍历链表)}
想在链表中间插入元素:1.调用链表listIterator(),返回一个listIterator迭代器对象 2.调用迭代器中的add方法
两个迭代器之间的冲突
使用get方法获得元素,导致效率低,可能使用了错误的数据结构。每次get之前都会从头重新开始搜索。
List.listlistIterator(n)
使用链表的理由:减少在列表中插入或删除元素所付出的的代价
避免在链表中实现整数索引:get(n),set(n),ListIerator(n),如果要进行这种随机访问最好用Arraylist。
注意迭代器所在位置,如果调用next后,add了一个元素,则此时迭代器在add的元素后面。
ArrayList:可以随机的访问每个元素的集合类。
散列集:
散列冲突,桶数目通常为元素的75%到150%,且为素数,以防集聚。装填因子为0.75时,以双倍桶数进行再散列
hashset:add,contains已被重写
迭代器访问时随机的,不关心元素中的顺序时使用。
树集(有序集合):添加元素比散列表慢,比数组或链表快。查找复杂度:log2n
对象的比较:
构造器:
TreeSet(Comparator<? super E> comparator) compartor接口实现int copare(T a , T b)方法,将实现了这一接口的对象传入Treeset的构造器,告诉Treeset如何对对象进行比较(不同集合中实现不同的比较方式,对象的类中没有实现compareable接口)
函数对象,通常动态定义。
映射表: