java源码阅读-集合接口
2017-02-22 20:14
344 查看
Collection接口
JAVA SDK不提供任何对Collection接口的直接实现,只提供对一些子接口的实现,子接口的实现必须有两个构造函数,一个是无参的构造函数,用于创建空集合,另一个是以Collection为参数的构造函数,用于复制集合类int size();---返回集合中的元素个数,如果个数大于'Integer.MAX_VALUE',则返回'Integer.MAX_VALUE' Object[] toArray();---此方法是数组和集合的一个桥梁,转换时会'另开辟一个新数组',无论这个集合是否由数组支持实现的(如List) <T> T[] toArray(T[] a);---同样,此方法转换时也是另开辟一个新的数组,并且可以指定数组长度,如果'指定的数组长度大于集合中的元素个数',那么后面的数组内容会被赋值为null,如果'指定数组元素为0或小于集合中的元素个数',那么会自动扩展为何集合同样个数的一个数组长度
List
List是一个允许重复项的有序集合,内部实现由数组支持,可以通过下标来进行插入或查询等操作bboolean remove(Object o);---若'有重复元素',则只会删除第一次出现的那一个 boolean addAll(int index, Collection<? extends E> c);---可以指定插入位置,若'指定的插入位置没有元素'会抛出IndexOutOfBoundsException
Set
Set是一种不包含重复的元素的无序集合,允许有null值,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。Queue
用于处理操作之前保存元素,除了Collection提供的方法外,还提供bb3b
了额外的方法,这些方法有两种执行结果,要么成功返回,要么失败抛出异常。
queue有两种插入操作,后一种插入操作专门用于容量限制,大多数情况下,不容易失败
<table BORDER CELLPADDING=3 CELLSPACING=1> <caption>Summary of Queue methods</caption> <tr> <td></td> <td ALIGN=CENTER><em>Throws exception</em></td> <td ALIGN=CENTER><em>Returns special value</em></td> </tr> <tr> <td><b>Insert</b></td> <td>{@link Queue#add add(e)}</td> <td>{@link Queue#offer offer(e)}</td> </tr> <tr> <td><b>Remove</b></td> <td>{@link Queue#remove remove()}</td> <td>{@link Queue#poll poll()}</td> </tr> <tr> <td><b>Examine</b></td> <td>{@link Queue#element element()}</td> <td>{@link Queue#peek peek()}</td> </tr> </table>
通常队列都是先进先出(FIFO)的方式,但也有例外,比如优先队列(根据提供的顺序的元素或元素的自认顺序)和后进先出队列(LIFO),在一个FIFO队列,所有新的元素插入队列的尾部。其他类型的队列可以使用不同的安置规则,但是每个队列的代码实现中都必须指定其排序属性。
boolean add(E e);---'成功'则插入,'失败'则抛出异常 boolean offer(E e);---'成功'则插入,'失败'则返回false E remove();---'检索'队列头元素,返回后'删除',若是'空队列',则抛出异常 E poll();---'检索'队列头元素,返回后'删除',若是'空队列',则返回null E element();---'检索'队列元素(返回队列头元素),但是'不删除',若是'空队列'则抛出异常 E peek();---'检索'队列元素(返回队列头元素),但是'不删除',若是'空队列',则返回null
Map
Map没有继承Collection接口,Map接口是提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。即是一一映射。我们可以把这个接口方法分成三组操作:改变、查询和提供可选视图,改变操作允许您从映射中添加和除去键-值对。键和值都可以为 null。但是,您不能把Map 作为一个键或值添加给自身。
V get(Object key);---若'key值对应的value',则返回,若没有则返回null,另外,在允许有空value的Map中,返回null不一定是没有此key,此时还需要另行判断,例如containsKey()方法 V put(K key, V value);---存放key-value对,若'key值存在',则原key值对应的value会被新的替换掉 V remove(Object key);---删除key-value对并返回value值,若'原key值不存在',则返回null Set<K> keySet();---返回所有的key值 Collection<V> values();---返回所有的value值 Set<Map.Entry<K, V>> entrySet();---返回所有的键值对集合 '以上两个修改',如果有迭代器正在进行操作,那么除了迭代器自己的remove操作,其余都是不允许的
相关文章推荐
- Java集合源码学习(6)_List接口的实现_ArrayList_Vector
- Java集合源码学习(11)_Set接口的实现LinkedHashSet
- java基础集合源码阅读笔记
- JAVA 集合类(java.util)源码阅读笔记------ArrayList
- JAVA源码阅读-集合框架(一)
- Java集合源码学习(7)_List接口的实现_LinkedList
- JDK源码阅读之Collection集合接口
- Java集合源码阅读笔记-LinkedList
- Java集合源码阅读笔记(1)
- java_集合体系之Map框架相关抽象类接口详解、源码
- Java集合源码学习(9)_Set接口的基础实现AbstractSet
- Java8 Iterable接口源码阅读
- Java集合源码学习(13)_Queue接口以及基础实现AbstractQueue
- java集合源码阅读笔记-HashMap
- java_集合体系之Map框架相关抽象类接口详解、源码——08
- Java集合源码学习(10)_Set接口的实现HashSet
- Java集合源码学习(16)_BlockingQueue接口的实现ArrayBlockingQueue
- Java集合源码学习(17)_BlockingQueue接口的实现LinkedBlockingQueue
- Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现
- Java集合源码阅读笔记-HashSet