数组简介
列表
- 列表的定义:是一种数据项构成的有限序列,即按照一定的线性顺序,排列而成的数据项的集合。
- 列表的概念是在集合的特征上形成的,它具有顺序,且长度是可变的。
- 列表最常见的表现形式有数组和链表,而我们熟悉的栈和队列则是两种特殊类型的列表。
数组
- 数组是列表的实现方式,它具有列表的特征,同时也具有自己的一些特征。
- 数组中的元素类型必须保持一致。
- 数组会用一些名为索引的数字来标识每项数据在数组中的位置,且在大多数编程语言中,索引是从 0 算起的。
- 列表中没有索引,这是数组与列表最大的不同点。
- 数组中的元素在内存中是连续存储的,且每个元素占用相同大小的内存。
- 列表中的元素在内存中可能彼此相邻,也可能不相邻。比如列表的另一种实现方式——链表,它的元素在内存中则不一定是连续的。
读取元素
- 读取数组中的元素,是通过访问索引的方式来读取的,索引一般从 0 开始。
- 对于数组,计算机会在内存中为其申请一段连续的空间,并且会记下索引为 0 处的内存地址。
查找元素
- 在查找元素时,只需从数组开头逐步向后查找就可以了。
插入元素
- 如果要将该元素插入到数组的末尾,只需要一步。
- 如果要将该元素插入到数组中的其他位置,则会有所区别,这时我们首先需要为该元素所要插入的位置腾出空间,然后进行插入操作。
- 如果需要频繁地对数组元素进行插入操作,会造成时间的浪费。事实上,另一种数据结构,即链表可以有效解决这个问题。
删除元素
- 删除元素与插入元素的操作类似,当我们删除掉数组中的某个元素后,数组中会留下 空缺 的位置,而数组中的元素在内存中是连续的,这就使得后面的元素需对该位置进行 填补 操作。
二维数组简介
- 二维数组是一种结构较为特殊的数组,只是将数组中的每个元素变成了一维数组。
- 类似一维数组,对于一个二维数组 A = [[1, 2, 3, 4],[2, 4, 5, 6],[1, 4, 6, 8]],计算机同样会在内存中申请一段 连续 的空间,并记录第一行数组的索引位置,即 A[0][0] 的内存地址。
字符串简介
比较函数
- 我们可以用 “==” 来比较两个字符串吗?Java中,无法使用 == 来比较两个字符串。当我们使用 == 时,它实际上会比较这两个对象是否是同一个对象。
双指针技巧
- 使用双指针的典型场景之一是你想要从两端向中间迭代数组。这时你可以使用双指针技巧:一个指针从头部开始,而另一个指针从尾部开始。
- 这是你需要使用双指针技巧的另一种非常常见的情况:同时有一个慢指针和一个快指针。解决这类问题的关键是: 确定两个指针的移动策略。