集合类的由来:
对象用于封装特有数据,对象多了就需要存储。如果对象的个数不确定,就是用集合容器进行存储。集合是一个容器,本身也是一个对象。
集合特点:
1. 用于存储对象的容器;
2. 集合的长度是可变的;(数组长度不可变)
3. 集合中不可以存储基本数据类型值;(只能存储对象,但数组都可以存储)
数值有很多,用数组存;数组有很多,用二维数组存;数据有很多,用对象存;对象有很多,用集合存;
集合容器因为内部的数据结构不同,有多种具体容器。不断的向上抽取,就形成了集合框架。
框架的顶层Collection接口:
Collection的常见方法:
1. 添加
boolean add(Object obj);
boolean addAll(Collection coll);
2. 删除
boolean remove(Object obj);
boolean removeAll(Collection coll);
3. 判断
boolean contains(Object obj);
boolean containAll(Collection coll);
boolean isEmpty();判断集合中是否有元素
4. 获取
int size();
Iterator iterator();取出元素的方式:迭代器
5. 其他
boolean retainAll(Collection coll);取交集
Object toArray();将集合转成数组
如何获取集合中的数据?
使用了Collection中的iterator()方法。调用集合中的迭代器方法。是为了获取集合中的迭代器对象。
while循环导致it对象在while循环之后,依然存在,占用内存空间。故开发过程中通常使用for循环。
迭代器原理:
Iterator iterator():
取出元素的方式:迭代器
该对象必须依赖于具体容器,因为每一个容器的数据结构都不同。所以该迭代器对象是在容器中进行内部实现的。
对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的对象即可。也就是iterator方法。
Iterator接口就是对所有的Collection容器进行元素取出的公共接口。
Collection:
1. List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。
2. Set:元素不能重复,无序。
List特有的常见方法:有一个共性特点是都可以操作角标。
添加:
void add(index,element);
void add(index,collection);
删除:
Object remove(index);
修改:
Object set(index,element);
获取:
Object get(index);
int indexOf(iobject);
int lastIndexOf(object);
List subList(from,to);
List集合可以完成对元素的增删改查。
ListIterator接口
List:
常用三个子类:
Vector:内部是数组数据结构,是同步的。增删,查询都很慢
ArrayList:内部是数组数据结构,是不同步的。替代了Vector。查询的速度快。
LinkedList:内部是数组数据结构,是不同步的。增删元素的速度很快。
Vector类
LinkedList类
练习:
LinkedList:
LinkedList相对ArrayList较少用。如果找不到该用那个,就用ArrayList(使用频率较高).
ArrayList: