Java集合框架
- Java集合类库也将接口与实现implementation分离
- 集合类的基本接口是Collection接口,这个接口有两个基本方法:boolean add(E element)和Iterator<E> Iterator()
- 迭代器Iterator接口包含4个方法:next(),hasNext(),remove(),forEachRemaining(Consumer<? super E> action);
- Collection接口扩展类Iterable接口。
- 元素被访问的类型取决于集合类型
- Collection接口还声明很多有用的方法;size(),isEmpty(),contains(),containsAll(),equals(),addAll(),remove(),removeAll(),clear(),retainAll(),toArray();
- 为了让实现者更容易地实现Collection接口,类库提供类一个类AbstractCollection
- 集合有两个基本接口http://www.codes51.com/article/detail_358737.html
- 由于Map包含键值对,所以用put方法插入,用get方法读取
- LIst是一个有序集合ordered Collection。元素会增加到容器中的特定位置。可以采用两种方式访问元素:使用迭代器访问,或者使用一个整数索引来访问。后一种方法被称为随机访问random access ,因为这样可以按任意顺序访问元素。与之不同,使用迭代器访问时,必须顺序地访问元素。
- List接口定义了多个用于随机访问的方法:add(index,element);remove(index);get(index);get(index,element);
- Set接口等同于Collection接口。set的add方法不允许增加重复的元素。
具体的集合
ArrayList:一种可以动态增长和缩减的索引序列
LinkedList:一种可以在任何位置进行高效地插入和删除操作的有序序列
ArrayDeque:一种用循环数组实现的双端队列
HashSet:一种没有重复元素的无序集合
TreeSet:有序集
EnumSet:一种包含枚举类型值的集
LinkedHashSet:一种可以记住元素插入次序的集
PriorityQueue:一种允许高效删除最小元素的集合
HashMap:一种存储键值关联的数据结构
TreeMap:一种键值有序排列的映射表
EnumMap:一种键值属于枚举类型的映射表
LinkedHashMap:一种可以记住键值添加次序的映射表
WeakHashMap:一种其值无用武之地后可以被垃圾回收期回收的映射表
IdentityHashMap:一种用==而不是用equals比较键值的映射表
- 链表LinkedList是一种有序集合,每个对象的位置十分重要。
- ArrayList:List接口用于描述一个有序集合,并且集合中每个元素的位置十分重要。有两种访问元素的协议:一种是用迭代器,另一种是用get和set方法随机地访问每个元素。后者不适合LinkedList,但对数组却很有用。ArrayList也实现类List接口,封装了一个动态再分配的对象数组。
- 在不需要同步时使用ArrayList,而不要使用Vector
- HashSet
- TreeSet是一个有序集合,可以以任意顺序将元素插入到集合中。在对集合进行遍历时,每个值将自动地按照排序后的顺序呈现。它的排序是用红黑树结构实现的。
- Deque,双端队列
- 优先级队列priorityQueue:可以按任意顺序插入,却总是按照排序后的顺序进行检索,它使用的数据结构是堆heap。堆是一个可以自我调整的二叉树。
映射
- 通常,我们知道某些键的信息,并想要查找与之对应的元素,Map数据结构为此设计。映射用来存放键值对,如果提供了键,就能够查找到值。
- 散列映射对键进行散列,树映射用键的整体顺序对元素进行排序,并将其组织成搜索树。散列和比较函数只能作用于键
- 与Set一样,如果不需要按照排列顺序访问键,最好选择HashMap,而不是TreeMap。
- 要想检索一个对象,必须使用一个键
- 映射视图view
- 弱散列映射WeakHashMap
- LinkedHashSet 和 LinkedHashMap用来记住插入元素项的顺序
视图与包装器
- 轻量级集合包装器
- 子范围
- 不可修改的视图unmodifiable views
- 同步视图
- 受查视图
算法
- 泛型集合接口有一个很大的优点,即算法只需要实现一次。
- 排序和混排
- 二分查找binarysearch
- 批操作
- 集合与数组的转换
遗留的集合