集合:
集合接口:
java类库将集合的接口和实现分离。队列的实现:循环数组和链表;前者更高效,后者没有上限。
AbstractQueue类用于用户自己实现队列类。
cllection(extends Iterable<E>)接口:基本方法1.boolean add() 2 iterator方法返回一个迭代器(next;hasnext;remove)
Collection<E> coll=......;
Iterator<String> iter=coll.iterator();//返回的迭代器在coll引用的对象中定义
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接口
具体的集合:
LIST:
链表:
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:可以随机的访问每个元素的集合类。
SET
散列集:
散列冲突,桶数目通常为元素的75%到150%,且为素数,以防集聚。装填因子为0.75时,以双倍桶数进行再散列
hashset:add,contains已被重写
迭代器访问时随机的,不关心元素中的顺序时使用。
2016-09-24
树集(有序集合):添加元素比散列表慢,比数组或链表快。查找复杂度:log2n
对象的比较:
一、元素对象中默认的compareto()方法
二、通过构造器:(不同集合中实现不同的比较方式,对象的类中没有实现compareable接口)
TreeSet(Comparator<? super E> comparator) compartor接口实现int coparator(T a , T b)方法,将实现了这一接口的对象传入Treeset的构造器,告诉Treeset如何对对象进行比较。比较器内没有数据,只是方法的持有期成为函数对象,通常动态定义,即定义为匿名内部类的实例。
总之一定要有以上二者之一,才能将元素插入TreeSet中。
Coparable接口:int compareto(T other);类中含有接口,说明类对象本身可以与其他对象相比较
Comparator接口:int comparator(T a, T b);类中含有接口,说明可以比较两个相同类型的对象,这个类中通常只有比较的方法(函数对象),可以匿名内部类定义
QUEUE
Qeque接口->Deque接口:在头部和尾部同时添加删除对列,不支持中间添加。
add,offer(尾部),remove,poll(头部),get,peek(各两种方法)
优先级队列:
映射表:HashMap和TreeMap
1.散列或排序都只针对键而言
2. 散列插入更加快,如果不需要按顺序访问键,就选择他
V put(K,V),get(),remove,size
集合框架并没有将映射表本身视为一个集合,然而可以获得映射表的视图。
Set<K> keySet()
Collection<V> values()
Set<Map.Entry<K,V>> entrySet()
Entry是map接口的内部接口,上式的Set<Map.Entry<K,V>>是实现了Set接口的对象,而这个对象中的元素类型是实现了Map.Entry<K,V>接口的类。
interface Map.Entry<K,V>方法:get key ; get value; set value
2016-09-25
专用集和应用表类:
1 weakHashMap:当堆键的唯一引用来自散列表条目时,这一数据结构将与垃圾回收器协同工作一起删除键/值对
2 linkedHashSet & linkedHashMap:
3 Enumset & Enummap