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类会比较深入些)。
写到这了,别的还在看。