Java 集合框架
1.集合由来
1. 在Java2之前,java是没有完整的集合框架的,它只有一些简单的可以自扩展的容器类,比如Vector,Stack,Hashtable等。java collections Framework(JCF)是通用的容器
2. 容器类可以存储多个数据,且java的容器类只能存放对象,对于基本类型(int,long,float,double等)需要被包装成对象类型后(Integer,Long,Float,Double等)才能放到容器里。这样会导致额外的性能和空间的开销
3. 数组 可以存基本类型的数据也可以保存对象。在数组可以存储多个数据的情况下,为什么还要定义容器类?
3.1.数组一旦初始化后其长度是固定不变的
3.2 如果在N个地方需要存储多个数据,都要专门编写数组的操作方法,如此一来,没有实现DRY原则,即代码功能重复—破坏封装
3.3 如果每一个人都要用到数组类,但是不同的人定义的类名和方法都是不同的,实现细节也是参差不齐的。SUN公司自己定义好容器类,每一个开发者只管调用即可。
尽管这些容器类非常好用,但是却不能集中和统一管理。集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。综合上述原因,因此集合被设计出来。
1.1 集合框架被设计成要满足以下几个目标。
- 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
- 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
- 对一个集合的扩展和适应必须是简单的。
2 集合框架
由上图可知道:
1. Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是 图(Map),存储键/值对映射
2 List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口
3. Set 下有HashSet,LinkedHashSet,TreeSet
4. List 下有ArrayList,Vector,LinkedList
5. Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
3.list 集合和set集合特点
list 接口:
1.有顺序以线性方式存储,可以存放重复对象
2 可以存放重复的元素
3 有索引 可以用for 循环遍历
set 接口:
1 无序
2 不可重复
3 没有索引,不能用 for 循环遍历。
4 Iterator迭代器
4.1 Iterator接口简介
iterator是为了实现对Java容器(collection)进行遍历功能的一个接口。在iterator实现了Iterator接口后,相当于把一个Collection容器的所有对象,做成一个线性表(List),而iterator本身是一个指针,开始时位于第一个元素之前。
4.2 常用方法
1 Boolean hasNext();
判断 iterator 内是否存在下1个元素,如果存在,返回true,否则返回false。(注意,这时上面的那个指针位置不变)
2 Object next();
返回 iterator 内下1个元素,同时上面的指针向后移动一位。
故,如果不断地循环执行next()方法,就可以遍历容器内所有的元素了。
3.oid remove();
删除 iterator 内指针的前1个元素,前提是至少执行过1次next();
(这个方法不建议使用,建议使用容器本身的romove 方法)