集合框架源码分析篇一(接口篇)

来源:互联网 发布:网络销售属于什么行业 编辑:程序博客网 时间:2024/06/05 19:19
一。Iterable接口
Java代码  收藏代码
  1. public interface Iterable<T> {  
  2.   
  3.     /** 
  4.      * 实现此接口的所有集合都可以使用foreach循环 
  5.      * 由于Collection接口扩展自Iterable接口, 
  6.      * 标准类库的任何集合都可以使用"for each"循环 
  7.      * @return an Iterator. 
  8.      */  
  9.     Iterator<T> iterator();  
  10. }  


二。interface Iterator<E>
Java代码  收藏代码
  1. public interface Iterator<E> {  
  2.     /** 
  3.      * 返回true如果迭代还有更多的元素 
  4.      * 换而言之,如果调用next()方法返回一个元素而不是抛出一个异常则返回true 
  5.      */  
  6.     boolean hasNext();  
  7.   
  8.   
  9.     /** 
  10.      * 返回迭代器中的下一个元素 
  11.      * 如果迭代器中没有更多的元素则抛出NoSuchElementException 
  12.      */  
  13.     E next();  
  14.   
  15.   
  16.     /** 
  17.      * remove方法将移除上一次调用next方法时返回的元素,如果想移除特定位置的元素 
  18.      * 需要先逃过该元素 
  19.      * 
  20.      * 如果没有调用next方法就调用remove方法将抛出IllegalStateException 
  21.      */  
  22.     void remove();  
  23. }  


三。interface Collection<E>
Java代码  收藏代码
  1. public interface Collection<E> extends Iterable<E> {  
  2.   
  3.     /** 
  4.      * 返回集合元素的个数,如果集合有元素超过Integer.MAX_VALUE 
  5.      * 返回Integer.MAX_VALUE 
  6.      */  
  7.     int size();  
  8.   
  9.   
  10.     /** 
  11.      * 如果集合不含元素则返回true 
  12.      * @return <tt>true</tt> if this collection contains no elements 
  13.      */  
  14.     boolean isEmpty();  
  15.   
  16.   
  17.     /** 
  18.      * 如果集合中含有参数o则返回true。 
  19.      * 正常来说返回结果如下, 
  20.      * 当且仅当集合中至少有一个元素e 
  21.      * o==null ? e==null : o.equals(e) 
  22.      * o的类型与集合元素类型不相容则抛出ClassCastException 
  23.      * 如果o为null,并且集合不允许空值则抛出NullPointerException 
  24.      */  
  25.     boolean contains(Object o);  
  26.   
  27.   
  28.     /** 
  29.      * 
  30.      * 返回集合元素的迭代器。 
  31.      */  
  32.     Iterator<E> iterator();  
  33.   
  34.   
  35.     /** 
  36.      * 返回一个对象数组,包含集合中的所有元素 
  37.      * 即使知道集合所包含的具体的数据类型也不能进行 
  38.      * 强制类型转换 
  39.      * 比如:String[] values = (String[])collect.toArray;  //错误 
  40.      * 可遍历时一一转换 
  41.      * 
  42.      */  
  43.     Object[] toArray();  
  44.   
  45.   
  46.     /** 
  47.      * 返回一个数组,包含集合中的所有元素  
  48.      * 数组元素的类型为指定数组类型 
  49.      * 
  50.      * 检查数组参数是否大于集合的容量。如果大于的话,便将该集合所有元素添加到数组 
  51.      * 中,并加上一个null结束符。如果等于集合长度,则将集合所有元素复制到数组但不 
  52.      * 添加null。如果小于的话,则以给定数组参数的类型新建一个数组,并将该集合各个 
  53.      * 元素填入数组。创建数组方法为 
  54.      * Array.newInstance(a.getClass().getComponentType(), size); 
  55.      */  
  56.     <T> T[] toArray(T[] a);  
  57.   
  58.   
  59.     /** 
  60.      * 将一个指定的元素添加到集合中,如果集合发生了改变则返回true。 
  61.      * 特殊的,一些集合拒接添加null,一些集合不会添加相同的元素, 
  62.      * 一些特殊类型的元素也不能添加到有些集合 
  63.      * 
  64.      * 如果集合不支持此方法则抛出UnsupportedOperationException 
  65.      * 如果指定元素类型阻止其被添加入集合则抛出ClassCastException 
  66.      * 如果指定元素为空,并且集合不支持添加null元素则抛出NullPointerException 
  67.      * 如果指定元素的一些特性拒绝其被加入集合则抛出IllegalArgumentException 
  68.      * 如果由于插入限制使e不能被添加则抛出IllegalStateException,在并发操作时可能 
  69.      * 会抛出此异常 
  70.      */  
  71.     boolean add(E e);  
  72.   
  73.   
  74.     /** 
  75.      * 如果o在集合中存在,则删除此元素 
  76.      * 如果有元素被移除,则返回true 
  77.      * 
  78.      * 如果指定元素类型与集合元素类型不兼容则抛出ClassCastException 
  79.      * 如果指定元素为空,并且集合不支持添加null元素则抛出NullPointerException 
  80.      * 如果集合不支持此方法则抛出UnsupportedOperationException 
  81.      */  
  82.     boolean remove(Object o);  
  83.   
  84.   
  85.     /** 
  86.      * 如果集合包含指定集合c中的所有元素则返回true 
  87.      * 
  88.      * 如果c中一个或多个元素类型与集合元素类型不相容则抛出ClassCastException 
  89.      * 如果如果指定集合c中包含一个或多个null元素,并且集合不支持添加null 
  90.      * 或者如果指定的集合c为null则抛出NullPointerException 
  91.      */  
  92.     boolean containsAll(Collection<?> c);  
  93.   
  94.   
  95.     /** 
  96.      * 把指定集合c中所有元素添加到集合中 
  97.      * 如果在添加元素过程中c已经被修改了,则称此操作是undefined,会抛出异常 
  98.      * 
  99.      * 如果集合不支持此方法则抛出UnsupportedOperationException 
  100.      * 如果指定集合元素类型阻止其被添加入集合则抛出ClassCastException 
  101.      * 如果如果指定集合c中包含一个或多个null元素,并且集合不支持添加null 
  102.      * 或者如果指定的集合c为null则抛出NullPointerException 
  103.      * 如果指定集合元素的一些特性拒绝其被加入集合则抛出IllegalArgumentException 
  104.      * 如果由于插入限制,指定集合中有一部分元素没有被添加到集合中则抛出 
  105.      * IllegalStateException,并发操作时可能发生 
  106.      */  
  107.     boolean addAll(Collection<? extends E> c);  
  108.   
  109.   
  110.     /** 
  111.      * 移除既包含在本集合中也包含在指定集合c中的所有元素 
  112.      * 如果集合发生改变则返回true 
  113.      *  
  114.      * 如果集合不支持此方法则抛出UnsupportedOperationException 
  115.      * 如果集合中元素类型与给定集合c元素类型不相容则抛出ClassCastException 
  116.      * 如果如果指定集合c中包含一个或多个null元素,并且集合不支持null 
  117.      * 或者如果指定的集合c为null则抛出NullPointerException 
  118.      */  
  119.     boolean removeAll(Collection<?> c);  
  120.   
  121.   
  122.     /** 
  123.      * 移除集合中所有不包含在指定集合c中的元素 
  124.      *  
  125.      * 如果集合不支持此方法则抛出UnsupportedOperationException 
  126.      * 如果集合中元素类型与给定集合c元素类型不相容则抛出ClassCastException 
  127.      * 如果指定集合c中包含一个或多个null元素,并且集合不支持null 
  128.      * 或者如果指定的集合c为null则抛出NullPointerException 
  129.      */  
  130.     boolean retainAll(Collection<?> c);  
  131.   
  132.   
  133.     /** 
  134.      * 移除集合中所有元素,此方法返回后isEmpty() = true 
  135.      * 
  136.      * 如果集合不支持此方法则抛出UnsupportedOperationException 
  137.      */  
  138.     void clear();  
  139.   
  140.     /** 
  141.      * 重写Object euqals方法 
  142.      * 
  143.      * 不同的集合equals方法不同 
  144.      */  
  145.     boolean equals(Object o);  
  146.   
  147.   
  148.     /** 
  149.      * 重写equals方法,也需要重写hashCode方法 
  150.      */  
  151.     int hashCode();  
  152. }  


四。interface List<E>
Java代码  收藏代码
  1. public interface List<E> extends Collection<E> {  
  2.   
  3.     /** 
  4.      * 同Collection接口 
  5.      */  
  6.     int size();  
  7.   
  8.   
  9.     /** 
  10.      * 同Collection接口 
  11.      */  
  12.     boolean isEmpty();  
  13.   
  14.     /** 
  15.      * 同Collection接口 
  16.      */  
  17.     boolean contains(Object o);  
  18.   
  19.     /** 
  20.      * 返回列表或队列的迭代器 
  21.      */  
  22.     Iterator<E> iterator();  
  23.   
  24.     /** 
  25.      * 同Collection接口 
  26.      */  
  27.     Object[] toArray();  
  28.   
  29.   
  30.     /** 
  31.      * 同Collection接口 
  32.       * 示例: String[] y = x.toArray(new String[0]) 
  33.      * 如果指定数组类型与list元素类型不相容则抛出ArrayStoreException 
  34.      * 如果指定数组a为null则抛出NullPointerException 
  35.      */  
  36.     <T> T[] toArray(T[] a);  
  37.   
  38.   
  39.     // Modification Operations  
  40.   
  41.     /** 
  42.      * 将一个元素添加到list的最后 
  43.       * 其他同Collection接口 
  44.      */  
  45.     boolean add(E e);  
  46.   
  47.     /** 
  48.      * 如果指定对象o在集合中存在,则移除它,如果存在多个o则移除第一个 
  49.      * 其他同Collection接口 
  50.      */  
  51.     boolean remove(Object o);  
  52.   
  53.   
  54.     /** 
  55.      * 如果集合中包含指定集合c中的所有元素则返回true 
  56.      * 其他同Collection接口 
  57.      */  
  58.     boolean containsAll(Collection<?> c);  
  59.   
  60.     /** 
  61.      * 同Collection接口 
  62.      */  
  63.     boolean addAll(Collection<? extends E> c);  
  64.   
  65.     /** 
  66.      * 在给定位置index插入指定集合c的第一个元素,然后依次插入后面的元素 
  67.       * 当在添加过程中指定集合c发生改变时,则认为此操作是undefined,将抛出异常 
  68.       * 
  69.      * 如果此集合不支持此方法则抛出UnsupportedOperationException 
  70.      * 如果指定集合元素的类型阻止其被加入List则抛出ClassCastException 
  71.      * 如果指定集合包含一个或多个null元素,并且List不允许null元素,或集合c为空 
  72.       *             则抛出NullPointerException 
  73.      * 如果集合c的一些元素特性阻止其被添加入List抛出IllegalArgumentException 
  74.      * 如果index<0 || index>size() 则抛出IndexOutOfBoundsException 
  75.      */  
  76.     boolean addAll(int index, Collection<? extends E> c);  
  77.   
  78.     /** 
  79.      * 同Collection接口 
  80.      */  
  81.     boolean removeAll(Collection<?> c);  
  82.   
  83.     /** 
  84.      * 同Collection接口 
  85.      */  
  86.     boolean retainAll(Collection<?> c);  
  87.   
  88.     /** 
  89.      * 同Collection接口 
  90.      */  
  91.     void clear();  
  92.   
  93.     /** 
  94.      * 重写Object的equals方法。 
  95.       * o与List相等的原则为: 
  96.       * 首先Obejct对象要是一个List,即实现了List接口 
  97.       * 其次2个集合在同样的位置包含同样的元素  
  98.      */  
  99.     boolean equals(Object o);  
  100.   
  101.     /** 
  102.      * 重写equals方法必须重写hashCode方法 
  103.       * List hashCode的计算公式为: 
  104.       * int hashCode = 1; 
  105.      *  Iterator<E> i = list.iterator(); 
  106.      *  while (i.hasNext()) { 
  107.      *      E obj = i.next(); 
  108.      *      hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode()); 
  109.      *  } 
  110.      */  
  111.     int hashCode();  
  112.   
  113.   
  114.     // Positional Access Operations  
  115.   
  116.     /** 
  117.      * 返回List中指定位置的元素 
  118.       * 如果index<0 || index>size() 则抛出IndexOutOfBoundsException 
  119.      */  
  120.     E get(int index);  
  121.   
  122.   
  123.     /** 
  124.      * 用element替换List中指定位置的元素 
  125.       * 
  126.      * 如果List,比如Set,不支持此操作则抛出UnsupportedOperationException 
  127.      * 如果element类型使其不能被添加则抛出ClassCastException 
  128.      * 如果给定的参数E为空并且List不允许空元素则抛出NullPointerException 
  129.      * 如果index<0 || index>size() 则抛出IndexOutOfBoundsException 
  130.      */  
  131.     E set(int index, E element);  
  132.   
  133.   
  134.     /** 
  135.      * 在指定位置插入一个元素element,并把随后的元素向右移 
  136.       * 异常抛出同上面的set方法 
  137.      */  
  138.     void add(int index, E element);  
  139.   
  140.   
  141.     /** 
  142.      * 移除List指定位置的元素,并把随后的元素向左移 
  143.      */  
  144.     E remove(int index);  
  145.   
  146.   
  147.     // Search Operations  
  148.   
  149.     /** 
  150.      * 如果List中含有与O相等的元素,则返回第一个的位置 
  151.       * 否则返回-1表示集合中不含此元素 
  152.       * 
  153.      * 如果o对象类型与List元素类型不相容则抛出ClassCastException 
  154.      * 如果给定的参数E为空并且List不允许空元素则抛出NullPointerException 
  155.      */  
  156.     int indexOf(Object o);  
  157.   
  158.     /** 
  159.      * 如果List中含有与O相等的元素,则返回最后一个的位置 
  160.       * 否则返回-1表示集合中不含此元素 
  161.      */  
  162.     int lastIndexOf(Object o);  
  163.   
  164.   
  165.     // List Iterators  
  166.   
  167.     /** 
  168.      * 返回一个listIterator 
  169.      * 特点:适用于对List进行遍历,包含一个add(E e)方法,在遍历时可在指定位置 
  170.       * 添加元素,包含previous()方法,hasPrevious()方法用于反向遍历 
  171.       * 下面将具体讲解listIterator接口 
  172.      */  
  173.     ListIterator<E> listIterator();  
  174.   
  175.     /** 
  176.      * 返回一个listIterator,在指定的位置开始迭代 
  177.       * 如果index<0 || index>size() 则抛出IndexOutOfBoundsException 
  178.      */  
  179.     ListIterator<E> listIterator(int index);  
  180.   
  181.     // View  
  182.   
  183.     /** 
  184.      * 获取List的子范围,子范围包含fromIndex但不包含toIndex 
  185.      * 你可以将任何操作作用于子范围,并且它们能够自动反应到List的情况 
  186.       * 比如:l.subList(10,19).clear(),子范围的各个元素将自动从l中删除。 
  187.      */  
  188.     List<E> subList(int fromIndex, int toIndex);  
  189. }  



五。interface ListIterator<E>
Java代码  收藏代码
  1. public interface ListIterator<E> extends Iterator<E> {  
  2.     // Query Operations  
  3.   
  4.     /** 
  5.      * 正向遍历时,如果迭代器还有更多的元素则返回true  
  6.      * 换而言之,如果调用next()方法返回一个元素而不是抛出一个异常则返回true 
  7.      * 
  8.      */  
  9.     boolean hasNext();  
  10.   
  11.   
  12.     /** 
  13.      * 返回List的下一个元素,当遍历List时此方法将被反复调用, 
  14.      * 也可以与previous方法混合调用  
  15.      * 如果迭代器没有下一个元素则抛出NoSuchElementException 
  16.      */  
  17.     E next();  
  18.   
  19.   
  20.     /** 
  21.      * 反方向遍历时,如果迭代器含有更多的元素则返回true 
  22.      * 换而言之,如果调用previous方法返回一个元素而不是抛出一个异常则返回true 
  23.      */  
  24.     boolean hasPrevious();  
  25.   
  26.   
  27.     /** 
  28.      * 返回List的前一个元素,当反向遍历时此方法将被反复调用, 
  29.      * 也可以与next方法混合调用  
  30.      * 如果迭代器没有上一个元素则抛出NoSuchElementException 
  31.      */  
  32.     E previous();  
  33.   
  34.   
  35.     /** 
  36.      * 返回下次调用next()方法时返回的元素的索引,如果返回的是最后一个         
  37.      * 元素则返回List的长度 
  38.      */  
  39.     int nextIndex();  
  40.   
  41.   
  42.     /** 
  43.      * 返回下次调用previous()方法时返回的元素的索引,如果 
  44.      * 迭代器刚好越过第一个元素,位于集合最开始的位置则返回-1 
  45.      */  
  46.     int previousIndex();  
  47.   
  48.   
  49.     // Modification Operations  
  50.   
  51.     /** 
  52.      * 移除最近一次调用next或者previous方法时返回的元素 
  53.      * 在调用next或者previous方法后,此方法仅能被调用一次 
  54.       * 此方法仅能在没有调用ListIterator.add时调用 
  55.       * 
  56.      * 如果List不支持此方法则抛出UnsupportedOperationException  
  57.      * 如果next或者previous没有被调用,或者next或previous已经被调用, 
  58.       * 但是同时已经调用了add或remove方法,再调用此方法时将抛出 
  59.       * IllegalStateException 
  60.      */  
  61.     void remove();  
  62.   
  63.   
  64.     /** 
  65.      * 以一个新的元素取代上一次调用next或previous方法时返回的元素 
  66.      * 此方法仅能在调用next或previous方法后没有调用ListIterator.remove 
  67.      * 或ListIterator.add情况下被调用 
  68.       * 
  69.      * 如果e类型与List元素类型不相容则抛出ClassCastException 
  70.      * 如果List不支持此方法则抛出UnsupportedOperationException 
  71.      * 如果元素的一些特性使其不能被添加入List则抛出IllegalArgumentException 
  72.      * 如果next或者previous没有被调用,或者next或previous已经被调用, 
  73.       * 但是同时已经调用了add或remove方法,再调用此方法时将抛出 
  74.       * IllegalStateException 
  75.      */  
  76.     void set(E e);  
  77.   
  78.   
  79.     /** 
  80.      * 将元素e插入到调用next方法返回的元素之后,或者调用previous方法返回的元素 
  81.      * 之前 
  82.       * 
  83.      * 如果e类型与List元素类型不相容则抛出ClassCastException 
  84.      * 如果List不支持此方法则抛出UnsupportedOperationException 
  85.      * 如果元素的一些特性使其不能被添加入List则抛出IllegalArgumentException 
  86.      */  
  87.     void add(E e);  
  88. }  



六。interface Set<E>
Java代码  收藏代码
  1. public interface Set<E> extends Collection<E> {  
  2.     // Query Operations  
  3.   
  4.     /** 
  5.      * 返回集合元素的个数,如果集合有元素超过Integer.MAX_VALUE 
  6.      * 返回Integer.MAX_VALUE 
  7.      */  
  8.     int size();  
  9.   
  10.   
  11.     /** 
  12.      * 如果Set不包含元素则返回true 
  13.      */  
  14.     boolean isEmpty();  
  15.   
  16.   
  17.     /** 
  18.      * 同List接口 
  19.      */  
  20.     boolean contains(Object o);  
  21.   
  22.   
  23.     /** 
  24.      * 同List接口 
  25.       * 其返回数组的元素的位置不定 
  26.      */  
  27.     Iterator<E> iterator();  
  28.   
  29.     /**  
  30.      * 同List接口 
  31.       * 其返回数组的元素的位置不定 
  32.      */  
  33.     <T> T[] toArray(T[] a);  
  34.   
  35.   
  36.     // Modification Operations  
  37.   
  38.     /** 
  39.      * 如果Set中已经含有此元素,Set不改变并且返回false 
  40.      * 此规定确保Set中不含有重复的元素   
  41.      * 
  42.      * 抛出异常同List接口      
  43.      */  
  44.     boolean add(E e);  
  45.   
  46.   
  47.     /** 
  48.      * 如果集合中存在此元素o则移除此元素 
  49.      */  
  50.     boolean remove(Object o);  
  51.   
  52.   
  53.     // Bulk Operations  
  54.   
  55.     /** 
  56.      * 如果Set中含有所有c中的元素,则返回true 
  57.      */  
  58.     boolean containsAll(Collection<?> c);  
  59.   
  60.     /** 
  61.      * 把知道集合c中的所有除了在Set中已经存在的元素添加到Set中 
  62.       * 如果c也是一个Set则是求2个集合的并集 
  63.       * 如果在添加元素的过程中发现C已经被修改了,则此操作是undefined 
  64.      */   
  65.     boolean addAll(Collection<? extends E> c);  
  66.   
  67.     /** 
  68.      * 移除集合中所有不包含在指定集合c中的元素 
  69.       * 如果c也是一个Set则是求2个集合的差集 
  70.      */  
  71.     boolean retainAll(Collection<?> c);  
  72.   
  73.     /** 
  74.      * 移除所有既包含在c中也包含在Set中的元素 
  75.      */  
  76.     boolean removeAll(Collection<?> c);  
  77.   
  78.     /** 
  79.      * 移除Set中所有元素,此方法返回后isEmpty()=true 
  80.      */  
  81.     void clear();  
  82.   
  83.   
  84.     // Comparison and hashing  
  85.   
  86.     /** 
  87.      * Set中的equals方法 
  88.       * 当且仅当满足以下条件时返回true: 
  89.      * 首先o是一个Set,即实现了Set接口 
  90.       * 其次两个Set长度相等并且o中所有元素都包含在Set中,Set中的所有元素也都包含 
  91.       * 在o中 
  92.      */  
  93.     boolean equals(Object o);  
  94.   
  95.     /** 
  96.      * 重写equals方法需要重写hashCode方法 
  97.       * Set的hashCode值为所有元素的hashCode值之和,如果元素为null,hashCode 
  98.      * 为0 
  99.      */  
  100.     int hashCode();  
  101. }  


七。interface Queue<E>
Java代码  收藏代码
  1. public interface Queue<E> extends Collection<E> {  
  2.     /** 
  3.      * 如果queue中有足够的容量,向queue中添加一个元素 
  4.       * 
  5.      * 如果queue中没有足够的容量则抛出IllegalStateException 
  6.      * 如果e的类型使其不能被添加入queue则抛出ClassCastException 
  7.      * 如果指定元素为null并且queue不支持null元素则抛出NullPointerException 
  8.      * 如果e的某些特征使其不能被添加入queue则抛出IllegalArgumentException 
  9.      */  
  10.     boolean add(E e);  
  11.   
  12.   
  13.     /** 
  14.      * 如果queue中有足够的容量,向queue中添加一个元素 
  15.       * 对于一个用大小限制的queue,此方法更加合适 
  16.      */  
  17.     boolean offer(E e);  
  18.   
  19.   
  20.     /** 
  21.      * 移除头节点并返回。 
  22.       * 当queue为空时抛出NoSuchElementException 
  23.      */  
  24.     E remove();  
  25.   
  26.   
  27.     /** 
  28.      * 移除头节点并返回 
  29.       * 当queue为空时返回null 
  30.      */  
  31.     E poll();  
  32.   
  33.   
  34.     /** 
  35.      * 获取头节点并返回 
  36.       * 当queue为空时抛出NoSuchElementException 
  37.      */  
  38.     E element();  
  39.   
  40.   
  41.     /** 
  42.      * 获取头节点并返回 
  43.       * 当queue为空时返回null 
  44.      */  
  45.     E peek();  
  46. }  



八。interface SortedSet<E>
Java代码  收藏代码
  1. public interface SortedSet<E> extends Set<E> {  
  2.     /** 
  3.      * comparator用于对集合元素进行排序, 
  4.      * 如果Set使用自然顺序排列其元素,则返回null 
  5.      */  
  6.     Comparator<? super E> comparator();  
  7.   
  8.     /** 
  9.      * 返回一个从fromElement(包含)到toElement(不包含)的子范围 
  10.      * 如果fromElement与toElement相等则返回的Set是空集 
  11.      * 子范围支持Set的所有操作,并且对子范围的操作将影响到Set 
  12.      * 
  13.      * 如果使用Set的comparator,fromElement和toElement不能进行互相比较 
  14.      * fromElement或toElement的类型与Set元素类型不相容则抛出ClassCastException 
  15.      * 如果fromElement或toElement为null,并且Set不支持null元素则抛出空指针异常 
  16.      * 如果fromElement比toElement大,这个大是使用comparator比较的结果, 
  17.      * 或者Set限制只能访问某范围,而fromElement或toElement位于此范围之外则 
  18.      * 抛出IllegalArgumentException 
  19.      */  
  20.     SortedSet<E> subSet(E fromElement, E toElement);  
  21.   
  22.     /** 
  23.      * 返回Set中使用比较器或自然顺序,元素大小严格小于toElement的元素集 
  24.      * 同样子范围支持Set的所有操作,并会反映到集合 
  25.      * 异常抛出同上 
  26.      */  
  27.     SortedSet<E> headSet(E toElement);  
  28.   
  29.     /** 
  30.      * 返回Set中使用比较器或自然顺序,元素大小大于等于fromElement的元素集 
  31.      * 同样子范围支持Set的所有操作,并会反映到集合 
  32.      * 异常抛出同上 
  33.      */  
  34.     SortedSet<E> tailSet(E fromElement);  
  35.   
  36.     /** 
  37.      * 返回集合的第一个元素,即最小元素 
  38.      * 如果集合为空则抛出NoSuchElementException 
  39.      */  
  40.     E first();  
  41.   
  42.     /** 
  43.      * 返回集合最后一个元素,即最大元素 
  44.      * 如果集合为空则抛出NoSuchElementException 
  45.      */  
  46.     E last();  
  47. }  



九。interface Map<K,V>
Java代码  收藏代码
  1. public interface Map<K,V> {  
  2.     // Query Operations  
  3.   
  4.     /** 
  5.      * 返回map中key-value映像的个数 
  6.      * 如果map中元素个数超过Integer.MAX_VALUE,返回Integer.MAX_VALUE 
  7.      */  
  8.     int size();  
  9.   
  10.     /** 
  11.      * 如果map中不含key-value映像则返回true 
  12.      */  
  13.     boolean isEmpty();  
  14.   
  15.     /** 
  16.      * 如果Map中含有一个映射的key值等于给定key则返回true 
  17.      * 
  18.      * 如果给定key值的类型与Map不相容则抛出ClassCastException 
  19.      * 如果给定key为null,并且Map不允许null key则抛出NullPointerException 
  20.      */  
  21.     boolean containsKey(Object key);  
  22.   
  23.     /** 
  24.      * map中key值唯一,但value值可能相同, 
  25.      * 如果有一个或多个value与指定value值相等则返回true 
  26.      * 同样可能抛出ClassCastException和NullPointerException异常 
  27.      */  
  28.     boolean containsValue(Object value);  
  29.   
  30.     /** 
  31.      * 返回与此key值对应的value值,如果map中不含此key则返回null 
  32.      * 这里有一个问题,如果map支持null value,那么返回null无法判断map中是否含有此 
  33.      * key值,这里可以用containsKey方法来判断 
  34.      * 同样可能抛出ClassCastException和NullPointerException异常 
  35.      */  
  36.     V get(Object key);  
  37.   
  38.     // Modification Operations  
  39.   
  40.     /** 
  41.      * 向map中添加一键值对。如果map中已经含有此key值,则替换原来的value为 
  42.      * 给定的value值,判断是否含有key值可使用m.containsKey方法,此方法返回true则 
  43.      * key值已经存在,返回false则不存在。 
  44.      * 如果m.containsKey返回true,则put方法返回原来的value,否则返回null 
  45.      * 
  46.      * 如果map不支持此方法则抛出UnsupportedOperationException 
  47.      * 如果给定key或value值类型阻止其被存入map则抛出ClassCastException 
  48.      * 如果给定key或value为null,并且map允许null key或null value则抛出 
  49.      *                           NullPointerException 
  50.      * 如果给定key或value的某属性使其不能被存入map则抛出IllegalArgumentException 
  51.      */  
  52.     V put(K key, V value);  
  53.   
  54.     /** 
  55.      * 根据给定key值移除键值对, 
  56.      * 返回移除的键值对的value值,如果key值不存在返回null. 
  57.      * 如果map支持null value,那么返回null无法判断map中是否含有此 
  58.      * key值,这里可以用containsKey方法来判断 
  59.      */  
  60.     V remove(Object key);  
  61.   
  62.   
  63.     // Bulk Operations  
  64.   
  65.     /** 
  66.      * 将m中所有键值对添加到Map, 
  67.      * 此方法等同于在循环中一组一组的添加键值对 
  68.      * 如果在添加过程中发现m已经被修改,则称此操作时undefined,可能抛出异常 
  69.      */  
  70.     void putAll(Map<? extends K, ? extends V> m);  
  71.   
  72.     /** 
  73.      * 移除map中所有键值对,此方法返回时isEmpty() = true 
  74.      */  
  75.     void clear();  
  76.   
  77.   
  78.     // Views  
  79.   
  80.     /** 
  81.      * 返回映射表中所有键的视图集 
  82.      * 对map的修改回反应到Set当中,相反,对Set中key进行移除操作,比如 
  83.      * Iterator.remove,Set.remove ,removeAll,retainAll,clear等操作时被移除的键 
  84.      * 和它相关联的值也将从map中被移除,但是此Set不支持任何添加操作 
  85.      * 如果在遍历Set时,发现map已经被修改,则称遍历的结果是undefined 
  86.      */  
  87.     Set<K> keySet();  
  88.   
  89.   
  90.     /** 
  91.      * 返回映射表中所有值的视图集。 
  92.      * 其他特性同上 
  93.      *  
  94.      */  
  95.     Collection<V> values();  
  96.   
  97.   
  98.     /** 
  99.      * 返回Map.entry对象的视图集,即映射表中的键值对. 
  100.      * 你可以从该集合中移除有关元素,同时,这些元素也将从映射表中被移除 
  101.      * 但你不能向其中添加任何元素 
  102.      * 可以获取Set<Map.Entry<K, V>>的迭代器来遍历map 
  103.      */  
  104.     Set<Map.Entry<K, V>> entrySet();  
  105.   
  106.     /** 
  107.      * 此接口是映射表的入口(键值对)。entrySet方法返回一个map的集合视图,此视图的 
  108.      * 元素就是Entry<K,V>,只能通过视图的iterator获取一个map entry的引用 
  109.      */  
  110.     interface Entry<K,V> {  
  111.         /** 
  112.      * 返回Entry中存储的key值 
  113.          * 如果遍历Set<Map.Entry<K, V>>时发现此entry已经被移除则抛出IllegalStateException 
  114.      */  
  115.     K getKey();  
  116.   
  117.         /** 
  118.      * 返回Entry中存储的value值 
  119.          * 如果遍历Set<Map.Entry<K, V>>时发现此entry已经被移除则抛出IllegalStateException 
  120.      */  
  121.     V getValue();  
  122.   
  123.         /** 
  124.      * 用给定的value替换此entry对应的value值,如果此键值对已经被移除 
  125.          * 则此方法的调用是undefined,此方法返回的是上一个value 
  126.          * 
  127.          * 如果此value的类型阻止其被存入map则抛出ClassCastException 
  128.          * 如果指定value值为null,并且map不允许null值则抛出NullPointerException 
  129.          * 如果指定value的一些属性阻止其被存入map则抛出IllegalArgumentException 
  130.          * 如果遍历Set<Map.Entry<K, V>>时发现此entry已经被移除则抛出IllegalStateException 
  131.          */  
  132.     V setValue(V value);  
  133.   
  134.     /** 
  135.      * 比较两个entry是否相等 
  136.          * 比较的原则是: 
  137.          * 首先o是否是一个Map.entry对象 
  138.          * 其次此entry是否对应同一个映射,即键key和value是否相等 
  139.          */  
  140.     boolean equals(Object o);  
  141.   
  142.     /** 
  143.      * 重新equals方法需要重新hashCode方法。 
  144.          * Entry的hashCode值的计算方法为: 
  145.          *  (e.getKey()==null   ? 0 : e.getKey().hashCode()) ^ 
  146.      *  (e.getValue()==null ? 0 : e.getValue().hashCode()) 
  147.          * 即key的hashCode与value的hashCode按位相与 
  148.      */  
  149.     int hashCode();  
  150.     }  
  151.   
  152.     // Comparison and hashing  
  153.   
  154.     /** 
  155.      * 比较两个Map是否相等 
  156.      * 比较原则: 
  157.      * 首先o是否是一个Map,即是否实现Map接口 
  158.      * 其次Map是否含有相同的键值对,因为map是无序的所以对位置无要求 
  159.      * 更加正式的来说m1.entrySet().equals(m2.entrySet())返回true则此方法返回true 
  160.      */  
  161.     boolean equals(Object o);  
  162.   
  163.     /** 
  164.      * 返回Map的hashCode值 
  165.      * 计算公式: 
  166.      * 为map.entrySet返回的集合的各个entry元素的hashCode之和 
  167.      */  
  168.     int hashCode();  
  169. }  



十。interface SortedMap<K,V>
Java代码  收藏代码
  1. public interface SortedMap<K,V> extends Map<K,V> {  
  2.     /** 
  3.      * 返回一个比较器用于比较key值大小, 
  4.      * 如果key使用自然顺序排列则返回null 
  5.      */  
  6.     Comparator<? super K> comparator();  
  7.   
  8.   
  9.     /** 
  10.      * 返回一个从fromKey(包含)到toKey(不包含)的子范围 
  11.      * 如果fromKey与toKey相等则返回的Map是空集 
  12.      * 子范围支持Map的所有操作,并且对子范围的操作将影响到Set 
  13.      * 
  14.      * 如果使用Map的comparator,fromKey和toKey不能进行互相比较 
  15.      * fromKey或toKey的类型与Set元素类型不相容则抛出ClassCastException 
  16.      * 如果fromKey或toKey为null,并且Set不支持null元素则抛出空指针异常 
  17.      * 如果fromKey比toKey大,这个大是使用comparator比较的结果, 
  18.      * 或者Set限制只能访问某范围,而fromKey或toKey位于此范围之外则 
  19.      * 抛出IllegalArgumentException 
  20.      * 
  21.      */  
  22.     SortedMap<K,V> subMap(K fromKey, K toKey);  
  23.   
  24.   
  25.     /** 
  26.      * 返回Map中使用比较器或自然顺序,元素大小严格小于toKey的元素集 
  27.      * 同样子范围支持Map的所有操作,并会反映到集合 
  28.      * 异常抛出同上 
  29.      */  
  30.     SortedMap<K,V> headMap(K toKey);  
  31.   
  32.   
  33.     /** 
  34.      * 返回Map中使用比较器或自然顺序,元素大小大于等于fromKey的元素集 
  35.      * 同样子范围支持Map的所有操作,并会反映到集合 
  36.      * 异常抛出同上 
  37.      */  
  38.     SortedMap<K,V> tailMap(K fromKey);  
  39.   
  40.   
  41.     /** 
  42.      * 返回集合的第一个元素,即最小元素 
  43.      * 如果集合为空则抛出NoSuchElementException 
  44.      */  
  45.     K firstKey();  
  46.   
  47.   
  48.     /** 
  49.      * 返回集合的第最后一个元素,即最大元素 
  50.      * 如果集合为空则抛出NoSuchElementException 
  51.      */  
  52.     K lastKey();  
  53.   
  54.   
  55.     /** 
  56.      * 返回包含在Map中的所有的key的子视图, 
  57.      * 用set的iterator返回的key是按升序排列的,其他属性与Map的keySet方法类似 
  58.      */  
  59.     Set<K> keySet();  
  60.   
  61.   
  62.     /** 
  63.      * 返回包含在Map中的所有的value的子视图, 
  64.      * 用Collection的iterator返回的value是按升序排列的,与key是一致的 
  65.      * 其他属性与Map的values方法类似 
  66.      */  
  67.     Collection<V> values();  
  68.   
  69.   
  70.     /** 
  71.      * 返回Map中键值对的视图, 
  72.      * Set的iterator返回的元素是键递增的。 
  73.      * 其他属性同Map的entrySet方法 
  74.      */  
  75.     Set<Map.Entry<K, V>> entrySet();  
  76. }  


十一。interface RandomAccess
Java代码  收藏代码
  1. /** 
  2.  * 此接口是一个记号,它看是否有List实现了此接口来指明是否此List支持快速随机访问 
  3.  * ArrayList和Vector都实现了RandomAccess 接口。 
  4.  * 可以使用instanceOf关键字来判断是否某集合实现了此接口 
  5.  */  
  6. public interface RandomAccess {  
  7. }  



十二。双端队列Deque
Java代码  收藏代码
  1. /** 
  2.  *  
  3.  * 双端队列,一个线性集合,负责在队列两端插入和移除元素. 
  4.  */  
  5. public interface Deque<E> extends Queue<E> {  
  6.     /** 
  7.      *  
  8.      * 将指定元素插入到双端队列的开头(如果这样做不违反容量限制) 
  9.      * 如果队列有容量限制,使用offerFirst方法会更好,因为 
  10.      * offerFirst在插入元素失败时返回一个null而不是抛出一个异常终止程序 
  11.      */  
  12.     void addFirst(E e);  
  13.   
  14.     /** 
  15.      *  将指定元素插入到双端队列的结尾(如果这样做不违反容量限制) 
  16.      *  如果队列有容量限制,请使用offerLast方法 
  17.      */  
  18.     void addLast(E e);  
  19.   
  20.     boolean offerFirst(E e);  
  21.     boolean offerLast(E e);  
  22.   
  23.     /** 
  24.      *  
  25.      * 移除双端队列的第一个元素,此方法在队列为空时 
  26.      * 将抛出一个异常 
  27.      */  
  28.     E removeFirst();  
  29.   
  30.     /** 
  31.      * 移除双端队列的最后一个元素,此方法在队列为空时 
  32.      * 将抛出一个异常 
  33.      */  
  34.     E removeLast();  
  35.   
  36.     /** 
  37.      * 移除双端队列的第一个元素,此方法在队列为空时 
  38.      * 将返回null 
  39.      */  
  40.     E pollFirst();  
  41.   
  42.     /** 
  43.      * 移除双端队列最后一个元素,此方法在队列为空时 
  44.      * 将返回null 
  45.      */  
  46.     E pollLast();  
  47.   
  48.     /** 
  49.      * 获取双端队列的第一个元素,此方法在队列为空时 
  50.      * 将抛出一个异常 
  51.      */  
  52.     E getFirst();  
  53.   
  54.     /** 
  55.      * 获取双端队列的最后一个元素,此方法在队列为空时 
  56.      * 将抛出一个异常 
  57.      */  
  58.     E getLast();  
  59.   
  60.     /** 
  61.      * 获取双端队列的第一个元素,此方法在队列为空时 
  62.      * 将返回null 
  63.      */  
  64.     E peekFirst();  
  65.   
  66.     /** 
  67.      * 获取双端队列的最后一个元素,此方法在队列为空时 
  68.      * 将返回null 
  69.      */  
  70.     E peekLast();  
  71.   
  72.     /** 
  73.      *  
  74.      *  找到o在队列中第一次出现的位置,并移除它 
  75.      *  如果队列不包含此元素,do nothing 
  76.      */  
  77.     boolean removeFirstOccurrence(Object o);  
  78.   
  79.     /** 
  80.      *  
  81.      * 找到o在队列中最后一次出现的位置,并移除它 
  82.      */  
  83.     boolean removeLastOccurrence(Object o);  
  84.       
  85.       
  86.   
  87.     // *** 下面是队列queue的一些方法 ***  
  88.   
  89.     /** 
  90.      *  
  91.      * 向双端队列 尾部添加一个元素,同addLast 
  92.      */  
  93.     boolean add(E e);  
  94.   
  95.     /** 
  96.      * 向双端队列 尾部添加一个元素,同offerLast 
  97.      */  
  98.     boolean offer(E e);  
  99.   
  100.     /** 
  101.      * 移除双端队列第一个元素,同removeFirst 
  102.      */  
  103.     E remove();  
  104.   
  105.     /** 
  106.      *  移除双端队列第一个元素,同pollFirst 
  107.      */  
  108.     E poll();  
  109.   
  110.     /** 
  111.      * 获取双端队列第一个元素,同getFirst 
  112.      */  
  113.     E element();  
  114.   
  115.     /** 
  116.      * 获取双端队列第一个元素,同peekFirst 
  117.      */  
  118.     E peek();  
  119.   
  120.   
  121.     // *** 下面是栈的一些方法 ***  
  122.   
  123.     /** 
  124.      * 向双端队列头部添加一个元素,同addFirst 
  125.      */  
  126.     void push(E e);  
  127.   
  128.     /** 
  129.      * 移除双端队列第一个元素,并返回它,同removeFirst 
  130.      */  
  131.     E pop();  
  132.   
  133.   
  134.     // *** 集合的一些方法 ***  
  135.   
  136.     /** 
  137.      * 从此双端队列中移除第一次出现的指定元素。如果此双端队列不包含该元素,则不作更改 
  138.      */  
  139.     boolean remove(Object o);  
  140.   
  141.     /** 
  142.      * 如果双端队列包含此元素则返回true 
  143.      */  
  144.     boolean contains(Object o);  
  145.   
  146.     /** 
  147.      * 队列元素个数 
  148.      */  
  149.     public int size();  
  150.   
  151.     /** 
  152.      * 返回双端队列的迭代器 
  153.      */  
  154.     Iterator<E> iterator();  
  155.   
  156.     /** 
  157.      * 返回一个逆序遍历的迭代器 
  158.      */  
  159.     Iterator<E> descendingIterator();  
  160.   
  161. }  


附上一张集合框架的接口关系图

原创粉丝点击