Iterator : 迭代器
- 迭代器是一种模式,又称光标,他可以使对于序列类型的数据结构的遍历行为与被遍历的对象分离
- 我们不需要关心该序列底层数据结构是什么样子的,只要拿到这个对象,使用迭代器就可以进行遍历这个集合对象
- 生成迭代器
- Iterator it = 集合对象.iterator();
- 迭代器为了方便遍历,提供了三个方法
- 1 boolean hasNext() : 判断光标的下一位是不是还有元素,有就是true,没有就是false
- 2 E next() : 将迭代器光标向下移动一位,并取出该元素 Element
- 3 remove() : 删除当前指向的元素
- 迭代器一旦创建,集合不能进行添加和删除操作,如果 添加或删除了.必须重新生成迭代器
- 增强for循环 forEach 就是为了让iterator循环访问的形式简单,写起来方便,但是也是不能进行添加和删除的
- 使用普通的for和while是可以进行添加删除的,这种遍历还是和数据结构存储相关的
泛型
- 泛型 是在编译阶段对数据的类型进行匹配
- 优点 : 统一了数据类型,减少强制类型转换
- 缺点 : 只能存储单一类型的数据
- 结合我们的需求情况,绝大部分情况都是需要保存统一类型的数据,所以大部分情况下,使用泛型要好很多
- 泛型 只能是引用类型,不能是基本类型
- 泛型本质就是一个占位符,由调用处对这个占位符赋值
- 如果不赋值,默认是Object
- 常见的占位符 :
- ? : 表示不确定的类型
- T : 表示一个具体的java类型 Type
- K : 表示key ,java中的键值对
- V : 表示value,
- E : 表示Element,元素,集合中的数据我们叫元素
- 用什么字母都是可以的,一般都是大写,只是占位符而已
- 泛型比Object 灵活,避免了一系列强制转换
比较器
Comparator 与 Comparable
- 1 要添加的元素 实现 java.lang.Comparable接口 并实现compareTo方法
- 2 写一个比较器类,实现java.util.Comparator比较器接口
- 很多常用的类中都实现了Comparable接口 并实现compareTo方法
- 比如 Integer , String , Date等
- 所以我们自定义类型的时候,一定要弄比较器类