All
JAVA基础
类的初始化顺序
静态变量和静态语句块会优先于实例变量和普通语句块
|
|
- 父类(静态变量,静态语句块)
- 子类(静态变量,静态语句块)
- 父类(实例变量,普通语句块)
- 父类(构造函数)
- 子类(实例变量,普通语句块)
- 子类(构造函数)
题目描述
实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1:
输入: haystack = “hello”, needle = “ll” 输出: 2 示例 2:
输入: haystack = “aaaaa”, needle = “bba” 输出: -1 说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
迭代器
在java中主要有两种迭代器,Iterator和ListIterator。这两个都是接口。先来看一下这两个接口有什么区别
|
|
Iterator主要有四个方法。判断有没有下一个元素、获取下一个元素,删除元素和forEachRemaining方法。
再来看一下ListIterator
|
|
我们可以看到他是继承了Iterator。除了上面的两个方法还多了好几个方法。判断是否有上一个元素,获取上一个元素的值,获取上一个元素的索引,获取上一个元素的索引。除了移除还有添加和更新的方法。
他们在不同的类里面都有自己的实现,之前看ArrayList,HashMap的时候把这一块给跳过了,现在来看一下他们是如何实现的。

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

LinkedHashMap继承了HashMap类,实现了Map接口。
他与HashMap的主要区别就是使用链表存储了每个节点的顺序。这样就能保证有序。
来看一下他的节点情况:
|
|
从这里可以看出他使用了两个变量,before,after存储这个节点的前后顺序。
LinkedList使用了链表实现,相比ArrayList来说,插入更快,查看较慢。
首先看一下使用的链表结构
|
|
每个Node节点存储一个元素,item表示这个元素的值,prev表示上一个元素,如果已经的第一个了那么为null。同理,next表示的是下一个元素,当插入新元素时会改变上一个元素的next值指向自己,这样就把这个链表串起来了。
变量
|
|