分类: Java
2013-03-18 11:36:58
原文地址:EMF--深入研究到骨子里--16 作者:mtloveft
水色 的为接口,蓝色的为抽象超类,跟黄色靠近的都是实现类。
橘黄色 的为List实现。
浅绿黄色 的为Queue的实现。
黄色 的为Set的实现。
深绿黄色 的为Map的实现。
主要接口如下:
Iterable 可迭代接口
Collection 集合接口
List List接口
Queue 队列 FIFO即First In First Out
Deque 双向队列
Set Set
SotedSet 排序分类Set
NavigableSet 继承于SotedSet,多一些方法
Map Map
SotedMap 排序分类Map
NavigableMap 继承于SotedMap,多一些方法
抽象类如下:
AbstractCollection 抽象Collection类
AbstractList 抽象List类
AbstractSequentialList 抽象有序List类
AbstractQueue 抽象Queue类
AbstractSet 抽象Set类
AbstractMap 抽象Map类
Dictionary 抽象字典类
实现类如下:
ArrayList 数组List
Vector 数组List(同步处理)
Stack 栈 FILO First In Last Out
LinkedList 链表List
ArrayDeque 数组双向队列
PriorityQueue 带优先级队列
EnumSet 枚举类型Set
JumboEnumSet 大容量枚举类型Set
TreeSet 树状Set
HashSet HashSet
LinkedHashSet 链表HashSet
TreeMap 树状Map
EnumMap Key为枚举类型的Map
HashMap HashMap
LinkedHashMap 链表HashMap
IdentityHashMap id hashMap(Key比较是用==)
WeakHashMap 弱Key hashMap
HashTable hash表
分类 | Interface | 实现类 | 初始化元素个数 | 插入顺序 | 重复 | 排序 | 同步 | Null插入 | 元素 | 说明 |
List | List | ArrayList | 10 | 有 | 可 | 无 | 无 | 可 | 任意 Object | |
Vector | 10 | 有 | 可 | 无 | 有 | 可 | 任意 Object | |||
Stack | 10 | 有 | 可 | 无 | 有 | 可 | 任意 Object | FILO | ||
LinkedList | 0 | 有 | 可 | 无 | 无 | 可 | 任意 Object | 同时实现了双向队列 | ||
Queue | Queue Deque |
ArrayDeque | 16 | 有 | 可 | 无 | 无 | 不可 | 任意 Object | 双向队列 |
PriorityQueue | 11 | 有 | 可 | 无 | 无 | 不可 | 任意 Object | 单向队列(FIFO) | ||
Set | Set SotedSet NavigableSet |
EnumSet | 根据参数 | 无 | 无 | 不可 | 必须为Enum列出的类型 | |||
JumboEnumSet | (参数+63)>>>6 | 无 | 不可 | 无 | 无 | 不可 | 必须为Enum列出的类型 | |||
TreeSet | 0 | 无 | 不可 | 有 | 无 | 不可 | 必须实现 Comparable 接口 或者被指定的 Comparator 所接受 |
|||
HashSet | 16 | 无 | 不可 | 无 | 无 | 可 | 任意 Object,需实现hashCode()方法 | |||
LinkedHashSet | 16 | 有 | 不可 | 有 | 无 | 可 | 任意 Object | |||
Map | Map SotedMap NavigableMap |
TreeMap | 0 | 无 | 不可 | 有 | 无 | Key必须实现 Comparable 接口 或者被指定的 Comparator 所接受 |
||
EnumMap | 根据参数 | 无 | 不可 | 无 | 无 | 不可 | Key必须为Enum列出的类型 | |||
HashMap | 16 | 无 | 不可 | 无 | 无 | 可 | 任意 Object | |||
LinkedHashMap | 16 | 有 | 不可 | 无 | 无 | 可 | 任意 Object | |||
IdentityHashMap | 32 | 无 | 不可 | 无 | 无 | 任意 Object | 元素严格相等(==来判断) | |||
HashTable | 11 | 无 | 不可 | 无 | 有 | 不可 | 任意 Object | |||
WeakHashMap | 16 | 无 | 不可 | 无 | 无 | 任意 Object | ※我从来没用过,也感觉没什么用。 |
Iterable就定义一个方法取得迭代器iterator()
Collection接口定义的方法如下:
向集合里添加元素: add(), addAll()
从集合里删除元素: remove(), removeAll()
判断一个元素是否包含在集合里: contains()
集合的大小: size()
集合是否为空: isEmpty()
集合清空: clear()
取两个集合的交集: retainAll()
判断一个集合是否为子集: containsAll()
把集合转化为数组: toArray()
继承自Iterable接口的取得迭代器: iterator()
List接口除了实现以上方法外还增加了以下方法,
根据坐标取得元素: get(int)
在指定坐标位置插入元素: add(int)
在指定坐标位置插入另一个集合: add(int,Collection extends E>)
取得一个元素在List里的最末尾的位置:lastIndexOf()
删除指定坐标位置的元素: remove(int)
替换指定坐标位置的元素: set()
取得List类型的迭代器: listIterator()
取得指定坐标位置的迭代器: listIterator(int)
取得两个坐标间的所有元素: subList(int, int)
Queue就是FIFO队列,队列有头有尾,但Queue只能对队列头操作。
remove(),poll(),peek(),element()都是取得队列的头,之间稍微有一点差别
peek()最简单,取得头,如果队列为空,则返回NULL
element()是对peek()的加强,如果为空队列,则抛出NoSuchElementException
poll()是取得队列的头,然后从队列里删除这个队列头。如果队列为空,就返回NULL。
remove()是对poll的加强,队列为空,就抛出NoSuchElementException异常。
offer()就是在队列尾增加元素,add()方法直接调用这个offer()方法。
Deque是双向队列,可以对队列的头和尾进行操作。
向队列头添加元素: addFirst(), offerFirst(), push(),
向队列尾添加元素: addLast(), offerLast(), add(), offer()
从队列头删除元素: removeFirst(), pollFirst(), poll(), remove(), pop()
从队列尾删除元素: removeLast(), pollLast()
取得队列的头元素: peekFisrt(), getFisrt(), peek(), element()
取得队列的尾元素: peekLast(), getLast()
从队列头开始,删除 第一次出现的元素: removeFistOccurrence()
从队列头开始,删除最后一次出现的元素: removeLastOccurrence()
Set接口基本就是对Collection接口的copy。
没有多增加方法。
Map接口的主要方法如下。
map里的一个条目用Entry来表示。
向map里追加一个条目: put()
取得所有的Key: keySet()
取得所有的值: values()
map里是否包含指定Key: containsKey()
map里是否包含指定值: containsValue()
取得所有条目: entrySet()
根据Key取得值: get()
根据Key删除map里的一个条目: remove()
两个map进行合并: putAll()
取得map的大小: size()
判断map是否为空: isEmpty()
清空map: clear()
简单介绍下JAVA6的JCF,下一篇再来看看EMF对JCF的扩展。EMF主要是扩展了List。
即使这样,功能还是强大了很多。