集合框架
概念:
提供了一系列对于批量数据的存储和处理方案
类似于数组 都只是存储对象的容器
数组:长度固定(手动扩容) 只能存储相同类型(多态)
集合:自动扩容 可以存储不同类型
框架结构
Collection (Collections提供了一套对于集合的操作方法 Connection连接) 父接口
所有单列集合所具备的方法
List 有序集合 子接口
重点研究业务:比较器
特点:存储顺序与展示顺序一致 有下标索引概念 可以使用普通for循环遍历 允许存储重复数据
ArrayList:类似于数组的一种集合结构 最常用的集合 查询快 增删慢 需要创建新数组 需要移动元素
LinkedList:双链结构的集合 查询慢 增删快 从头开始查找
Vector:最老的集合结构 线程安全的集合
Set 无序集合 子接口
重点研究业务:数据的去重
特点:存储顺序与展示顺序不一致 没有下标 只能使用增强for循环(迭代器)不允许存储重复数据
HashSet:
LinkedHashSet:HashSet集合的子类 多了一根链条 可以保存存储顺序 但是依然没有索引下标
TreeSet:
Collection 父接口
boolean add(E e) 添加元素
boolean addAll(Collection) 添加一个集合
boolean remove(Object) 移除某个对象
boolean removeAll(Collection) 移除其中集合
boolean removeIf(Predicate filter) 有条件移除元素
void clear() 清除所有的元素
boolean contains(Object) 判断是否包含某个元素
Iterator iterator() 获取集合迭代器对象
int size() 获取元素个数(不是空间个数)
Object[] toArray() 将集合转为数组
迭代器 Iterator 用于所有的集合
boolean hasNext() 是否有下一个值
Object next() 获取下一个值
//1.获取当前集合的迭代器对象
Iterator iterator = names.iterator();
//2.循环判断是否还有元素
while(iterator.hasNext()) {
//3.保存当前元素并输出
Object o = iterator.next();
System.out.print(o+" ");
}
for(Object o : names){
System.out.print(o+" ");
}
双向迭代器 ListIterator 只能用于有序集合
boolean hasNext() 是否有下一个值
Object next() 获取下一个值
boolean hasPrevious() 判断是否有前一个值
Object previous() 获取前一个值
获取双向迭代器
ListIterator 有序集合.ListIterator() 默认指针在最左侧
ListIterator 有序集合.ListIterator(int num) 默认指针在num位
ArrayList al = new ArrayList();
al.add(值);
...
//通过有序集合引用名 获取其双向迭代器对象
ListIterator lt = al.listIterator(names.size());
// //通过同一个迭代器对象的正向迭代方法 使指针停留在最后一个元素右侧
// while(lt.hasNext()) {
// lt.next();
// }
//再次使用同一个迭代器对象 向左逆向迭代 集合中元素顺序没改变
while(lt.hasPrevious()) {
Object o = lt.previous();
System.out.print(o+" ");
}