读书人

Java聚合框架基础接口

发布时间: 2012-12-20 09:53:21 作者: rapoo

Java集合框架——基础接口

Java集合框架专题(学习的那个过程,请指教)



???????? Java集合框架——基础接口

?

先看图:

Java聚合框架——基础接口

?

上图中关键的接口有:

Collection?? Set?? List?? Map?? 还有一个Iterator,还有一个是上图没有的Queue接口,也是继承Collection的。

图中的

1,短虚线,表示接口;

2,长虚线,表示抽象类;

3,实线,表示实现类;

4,加强线,表示重点;(没别的意思,这图不是我自己画的,只能解释一下)

5,虚线加实心箭头,表示当前接口实现了一个指向接口定义的方法。

6,Collections与Arrays是两个支持类,实现了很多的静态方法可以直接使用。(一定要看看)

基本图介绍完后,看具体的接口方法,很大程度上是这样的,理解了接口,也就理解了框架。

?

第1点:Collection

?

int size();?????????????????????????????? //获取长度

?

boolean isEmpty();??????????????? //判断为空

?

boolean contains(Object o);? //判断是包含当前元素,它有两个可选择的异常;1,当类型不匹配时,抛出ClassCastException;2,当集合为NULL时,抛出NullPointerException。

?

Iterator<E> iterator();????????? //迭代器,不能保证顺序的返回元素(除非能够保证集合都是某个类的实例)

?

Object[] toArray();??????????????? //返回一个数组(如果集合满足迭代器的规则,返回的数组必须保证顺序)

?

<T> T[] toArray(T[] a);????????? //看上一点,泛型要主要类型,会抛出ArrayStoreException与NullPointerException两种异常,其实在toArray()也加一个NullPointerException为可选比较好,实际也是有的。

?

boolean add(E e);???????????????? //增加一个元素到集合

?

boolean remove(Object o);?? //从集合中移除一个元素

?

下面这部分是对组的操作

boolean containsAll(Collection<?> c);

boolean addAll(Collection<? extends E> c);

boolean removeAll(Collection<?> c);

boolean retainAll(Collection<?> c);???????????????? //与removeAll的功能相反,移除不属于c的元素。

void clear();???????????????????????????????????????????????????? //清空集合

?

下面两个是

boolean equals(Object o);?????//比较两个对象是否相等

int hashCode();???????????????????? ?//主要是加快比较,如果调用equals方法相等,hashCode必须相等,反过来是不成立的,这样就可以通过比较两个hashCode,如果不相等,equals就不相等。

?

第二点:Set (略,因为与Collection一样)没有加新方法,至于为什么要这个,而直接用Collection,这个有点像是儿子与侄子的关系,就是为了让Set与List接口平级,也许我的说法有些问题,因为我还没有想到别的比喻。

?

第三点:List

在Collection接口的基础上加了以下方法:

boolean addAll(int index, Collection<? extends E> c); //从指定位置插入

?

E get(int index);????????????????????? //获取指定位置的元素

E set(int index, E element);???? //修改指定位置的元素

void add(int index, E element);//在指定的位置插入元素

E remove(int index);????????????????//根据位置移除元素

int indexOf(Object o);????????????? //返回第一次出现o元素的位置

int lastIndexOf(Object o);??????? //与上一条相反,最后的位置

ListIterator<E> listIterator();????????????? //调用listIterator(0);所以只关注下面的方法及可

ListIterator<E> listIterator(int index);//其实这个方法是list自己的实现,而Iterator为了统一调用,最后也是调用这个方法,listIterator(),再到listIterator(0);这个方法实现了list表的迭代器,是特性,肯定是重点关注。

List<E> subList(int fromIndex, int toIndex);//返回一个从fromIndex到toIndex的list

?

第四点:Map<K,V>

与Collection没有直接的继承关系,只不过有一个返回Collection的values方法。

int size();

boolean isEmpty();

boolean containsKey(Object key);

boolean containsValue(Object value);

V get(Object key);

V put(K key, V value);

V remove(Object key);

void putAll(Map<? extends K, ? extends V> m);

void clear();

Set<K> keySet();

Collection<V> values();

Set<Map.Entry<K, V>> entrySet();

interface Entry<K,V>

?

?

boolean equals(Object o);

int hashCode();

?

突然不想加备注了,读者自己看吧,总不能总是依靠别人来哦,因为我写的这个,不是知识博文,也是过程博文。

?

?

差点把Queue给忘记了。

第五点:Queue

这个在继承Collection后,也是增加了自己的方法:

boolean add(E e);

boolean offer(E e);

E remove();

E poll();

E element();

E peek();

?

它在concurrent包中得到了重用,在util包中有Deque接口继承了它,再是LinkedList与ArrayDeque实现了Deque接口。这一块目前,网上资料不多,应该重点关注(刚好学好了,再去写线程池ThreadPoolExecutor类会比较深入些)。

?

写到这了,别的还在看。

?

?

?

?

?

?

?


读书人网 >编程

热点推荐