集合

集合:


集合接口:

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

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/ChuPengcheng/p/5898825.html