首页 > 代码库 > java学习笔记9.23(集合)

java学习笔记9.23(集合)

集合接口:

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接口)

函数对象,通常动态定义。

 

 

映射表:

 

java学习笔记9.23(集合)