持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,[点击查看活动详情]
迭代器
迭代器:就是访问集合中每一个元素。集合较多,其实现底层的数据结构,所以导致各自的遍历方式是不一样的。将这些集合中遍历的操作进行共性抽取,就形成迭代器。
工作原理:
1,先判断是否有元素
2,取出当前元素,再接着判断之后是否会有元素。
3,再接着判断之后是否会有元素,直到没有元素为止。
用法
获取当前集合的迭代器(由于具体集合的不同,其迭代器的具体工作方式也不同)。Iterator<E> it = c1.iterator();.
注意
但凡有迭代器的容器都可以被foreach迭代,迭代器就是foreach的本质。
List
Collection的子接口。
除了从collection来的方法外,还有角标相关的方法。
方法
void add(int index,E element)在指定角标index处添加元素element。建议从0开始添加。
E get(int index)返回指定元素角标index处元素。`
int indexOf(Object o)返回指定元素从左到右第一次出现角标。
int lastIndexOf(Object o)返回指定元素从右到左第一次出现角标。
实现子类
ArraryList:List接口的大小可变数组的实现。允许空元素存在。不断扩容。线程不安全。 动态数组
LinkedList:比ArraryList厉害。万金油(该实现子类可以当作列表,队列,栈,双端队列去使用)。除了实现List的功能之外,还实现了Queue队列接口。本质上是双向循环列链表。优点:查改比较快。弊端:增删比较慢,占用了大片连续内存空间。栈
Vector:和ArraryList很像。此实现是同步的(线程安全)-函数加锁-单线程下效率慢。不推荐使用。
Stack:是Vector的一个子类,表示的是栈。被LinkedList替代。
LinkedList的方法:
1,LinkedList当作双端队列去用。(都是对头尾操作的)
2,LinkedList用作队列。
3,LinkedList用作栈
Iterator:作用与所有的集合类,在遍历集合的时候不允许对集合的元素进行增删改。否则报错角标越界。因为迭代器是根据集合当前状态而创建的,如果集合中元素变化,则迭代器不知道。
ListIterator:作用于所有的List集合类。在遍历的时候允许对集合中的元素进行增删改。在遍历的过程中,用ListIterator增删改是可以迭代到元素的,用List增删改是迭代不到元素的。
链表
链表的优点:利用的是一些零散的内存空间,利用率比较高,增删比较快。
链表的缺点:查改比较慢。
单向链表,双向链表。
Queue
只能在头尾进行操作。
除了从collection来的方法外,还有头尾相关的方法。
Dequeue 双端队列
LinkedList:双向循环链表(只能在头和尾的链表进行操作,也可以在任何位置List)
ArrayDeque: 循环队列(只能在头和尾对数组进行操作)
PriorityQueue 优先队列
元素的入队顺序不代表该优先队列的迭代顺序。
元素的排布之和元素的优先级有关系(优先不表示元素入队顺序,仅表示元素之间的优先关系)
set
一个不包含重复元素的collection.
不提供角标访问。
方法纯粹从collection来的,没有特殊方法。
实现子类
HashSet:
1,由哈希表实现
2,不保证set的迭代顺序
3,此类允许使用null元素
4,此实现是不同步的(线程不安全——适合在单线程使用)。
5,单链接数组。
LinkedHashSet:
1,继承自HashSet。
2,哈希表和链接列表实现(双重链接列表)
3,实现是不同步的
4,是有序的。允许null.
TreeSet:
1,底层数据结构-红黑树。
2,排序-自然顺序。需要实现Comparable接口。
3,实现是不同步的
4,不允许空和重复元素。
Collection 常用实现子类比较
重复 null 有序 安全 底层结构 备注
ArraryList 允许 允许 有序 不安全 动态数组 支持角标访问
LinkedList 允许 允许 有序 不安全 双向循环链表 可以用作栈,队列,列表,支持头尾操作
Vector 允许 允许 有序 安全 动态数组 被ArraryList代替
Stack 允许 允许 有序 安全 动态数组 是Vector子类,被LinkedList代替
ArrayDeque 允许 禁止 有序 不安全 数组循环队列 快
PriorityQueue 允许 禁止 有序 不安全 最小堆 要元素对象实现Comparable接口,定义优先级大小
HashSet 禁止 允许 无序 不安全 哈希表+单链表 要重写
LinkedHashSet 禁止 允许 有序 不安全 哈希表+双重链表
TreeSet 禁止 禁止 有序 不安全 红黑树 自然排序,要元素对象实现Comparable接口,定义元素大小。
list---唯一一种支持增删改查的集合接口