框架简介
**集合框架:**用于存储数据的容器。集合框架是为表示和操作而规定的一种统一的标准的体系结构,任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合的算法
**接口:**表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现。 **实现:**集合接口的具体实现,重用性很高的数据结构 **算法:**在一个实现了某个集合框架的接口的对象上完成的某一种有用的计算方法,例如查找、排序等。
框架特点
- 对象封装数据,集合用于存储对象
- 存储的对象个数确定了可以使用数组,对象个数不确定可以使用集合,集合长度可变
集合与数组的区别
- 数组的长度是固定的;集合的长度是可变的
- 数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用类型。
- 数组存储的元素必须是相同的数据类型;集合存储的对象可以是不同的数据类型
**集合的数据结构:**存储数据的方式
集合框架的好处
- 集合框架的大小灵活可变;
- 集合框架提供了高性能的数据结构和算法;
- 集合框架能够存储不同类型的元素对象,存储方式更为灵活
- 允许不同API之间相互操作,API之间可以来回传递集合;
集合框架的接口
所有的集合类都位于Java.util包下。Java的集合类主要有两个接口派生而出:Collectionhe和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
- Collection 一次存一个元素,是单列集合;
- Map一次存一对元素,是双列集合。Map存储的一对元素:键-值,键(key)与值(value)间有对应(映射)关系
单列集合继承关系图 
lterator接口
lterator接口,用于遍历集合元素的接口。 接口API:
- hasNext()如果仍有元素可以迭代,则返回true
- next()返回迭代的下一个元素
- remove()从迭代器指向的collection中移除迭代器返回的最后一个元素
Listlterator接口
Listlterator也是一个迭代器,比lterator更强大,继承于lterator接口,只能用于个list类型的访问。可以通过调用listlterator()方法产生一个指向List开始出的Listlterator,还可以调用Listlterator(n)方法创建一个一开始就指向列表索引为 n 的元素的Listlterator
特点
- 允许我们向前,向后两个方向遍历list
- 在遍历时修改list的元素
- 遍历时获取迭代器当前游标所在的位置
常用的API
- add(E e)将指定的元素插入到列表
- hasNext()如果迭代器在前进的方向还有更多元素,返回true
- hasPervious()如果此列表迭代器在相反的方向还有元素则返回true
- next()返回列表中的下一个元素和光标的位置向后推
- nextIndex() 返回调用 next()后返回的元素索引
- previous() 返回列表中的上一个元素和光标的位置向前移动。
- previousIndex() 返回调用previous() 后返回的元素索引 。
- remove()删除列表中调用next()或previous()返回的最后一个元素
- set(E e)用指定元素替换列表中next()或previous()调用的最后一个元素
Collection接口
Collection集合主要有两大接口:List和Set
- List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引,元素可以重复
- Set:无序(存入和取出顺序可能不一致),不可以存储重复元素,必须保证元素唯一性。
List集合 List是元素有序并且可以重复的集合。 List的主要实现:ArrayList,LinkedList,Vector。
ArrarList、LinkedLis和Vector的区别
- ArrayList和Vector基于数组实现,对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。
- LinkedList 不会出现扩容问题,所以比较适合随机位置增、删。但是在定位时需要线性扫描,效率较低
- 当操作是一系列数据的后面添加数据而不是在前面或中间,并且需要随机访问其中的元素时,使用ArrayList会提供比较好的性能
- 当操作是一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就需要LinkedList
List常用方法
- 增:add(index,element),addAll(index,Collection)
- 删:remove(index),remove(Collection),clear()
- 改:set(index,element)
- 获取:get(index),subList(from,to),listlterator(),indexOf(object),size()
- 判断:isEmpty(),contains(Collection)
Set集合 Set集合元素无序(存入和取出的顺序不一定一致),并且没有重复对象。Set的主要实现类:HashSet、TreeSet、LinkedHashSet。
区别: HashSet是一个通用功能的Set,而LinkedHashSet提供元素插入顺序保证,TreeSet是一个SortSet实现,由Comparable或者Comparator指定的元素顺序存储元素
Set常用方法:
- 增:add(element)、addAll(Collection)
- 删:remove(object),removeAll(Conllection)、clear()
- 获取:get(index)、listlterator()、size()
- 判断:isEmpty()、contains(Conllection )
- 区别与list:equals(Object)、hashCode()
Map接口
Map接口是一种把键对象和值对象建立映射的集合,它的每一个元素都包含一对键对象和值对象。Map没有继承于Collection接口,从Map集合查找元素时,只要给出键对象,就会返回对应的值对象。
Map常用的实现类:HashMap、TreeMap、HashTable、LinkedHashMap、ConcurrentHashMap
Map常用方法
- 增:put(Object key,Object value)、putAll(Map t)
- 删:remove(Object key)、clear()
- 获取:get(Object key)、size()、entrySet()、keySet()、values()
- 判断:isEmpty()、containsValue()
- containsKey()
- 同Set:equals(Object c)、hashCode()
HashMap、HashTable、TreeMap 
|