All
迭代器
在java中主要有两种迭代器,Iterator和ListIterator。这两个都是接口。先来看一下这两个接口有什么区别
|
|
Iterator主要有四个方法。判断有没有下一个元素、获取下一个元素,删除元素和forEachRemaining方法。
再来看一下ListIterator
|
|
我们可以看到他是继承了Iterator。除了上面的两个方法还多了好几个方法。判断是否有上一个元素,获取上一个元素的值,获取上一个元素的索引,获取上一个元素的索引。除了移除还有添加和更新的方法。
他们在不同的类里面都有自己的实现,之前看ArrayList,HashMap的时候把这一块给跳过了,现在来看一下他们是如何实现的。

画了一张结构图,欢迎指正。
变量
|
|

LinkedHashMap继承了HashMap类,实现了Map接口。
他与HashMap的主要区别就是使用链表存储了每个节点的顺序。这样就能保证有序。
来看一下他的节点情况:
|
|
从这里可以看出他使用了两个变量,before,after存储这个节点的前后顺序。
LinkedList使用了链表实现,相比ArrayList来说,插入更快,查看较慢。
首先看一下使用的链表结构
|
|
每个Node节点存储一个元素,item表示这个元素的值,prev表示上一个元素,如果已经的第一个了那么为null。同理,next表示的是下一个元素,当插入新元素时会改变上一个元素的next值指向自己,这样就把这个链表串起来了。
变量
|
|
变量
|
|
DEFAULT_CAPACITY:默认的容量,当我们不指定容量时默认容量是10EMPTY_ELEMENTDATA:空的数据集DEFAULTCAPACITY_EMPTY_ELEMENTDATA:同上面的一样,都是空的数据集elementData:保存的元素size:元素长度,实际存储的元素数量
构造方法:
- 无参的构造方法
|
|
很简单的一句话,将保存元素的变量进行初始化。
题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
题目描述
在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次。
返回重复了 N 次的那个元素。
示例 1:
输入:[1,2,3,3] 输出:3 示例 2:
输入:[2,1,2,5,3,2] 输出:2 示例 3:
输入:[5,1,5,2,5,3,5,4] 输出:5
提示:
4 <= A.length <= 10000 0 <= A[i] < 10000 A.length 为偶数
大小为2N的数字中有个N+1个元素,其中有个元素重复了N次,这也说明了除了这个元素其他元素都没有重复,也可以理解成查找重复的元素