认识线性表和顺序表以及ArrayList在java中的用法
线性表和顺序表
线性表(linear list):是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
线性表
1.顺序表(逻辑上线性,在内存中存储时,也是严格按照逻辑上的次序保存起来的)
2.链表(逻辑上线性,在内存中存储时,不保证连续性了)
数组就是一种“不是非常完备”的顺序表
数组中存在的问题:
1.无法严格区分容量和已有元素个数
例:long[]array = new long[5]
只能看出来容量是5,无法知道里面放了几个有效元素。
2.数组无法自行扩容
往array中放有效元素,最多放5个,再放就越界了。
而顺序表就先进多了,可以自行扩容,但必须连续
例:1 2 3
1 2 _ _3这种顺序表中不允许
ArrayList常见使用方法
java中已经提供的顺序表—类java.util.ArrayList
可以借助文档:
https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html(英文)
线性结构
特点:
(1). 元素和元素之间有前后关系
(2). 元素会有在第几个位置的概念,位置通过下标(index)表示,从 0 开始
(3). 插入可以根据位置的不同,分为:头插、尾插、按位置插入
(4). 删除可以根据位置的不同,分为:头删、尾删、按位置删除
(5). 遍历可以分为从前往后遍历和从后往前遍历
(6). Java 中,List 是一个接口,并且是 Collection 的子接口
1.boolean add(元素类型 e);
向顺序表中进行“尾插”,一定true
代表将 e 尾插到线性表中,e表示待插入的元素,一定会插入,线性表不会出现插入不成功的情况的。
在写代码时知道:
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[] args) {
// 定义一个元素类型是 String 的顺序表
ArrayList<String> list = new ArrayList<>(); // 一开始是一个空的顺序表
list.add("我"); // 由于元素类型是 String 类型,所以元素(参数)类型是String
list.add("你");
list.add("他");
System.out.println(list);
这是进行尾插的结果
2.void add(int index, 元素类型 e);
代表向顺序表中插入e元素,放到下标为index的位置,要求原来 index 及之后的元素全部向后移动
例如add(1,元素),变成
添加代码
list.add(0, "你");
System.out.println(list);
变为
3.元素类型 remove(int index);
表示删除 index 位置的元素,并返回该元素;要求 原来 index + 1 及之后元素全部向前移动。
添加代码
list.remove(2);
System.out.println(list);
结果:
4.boolean remove(元素类型 e);
规则:
添加代码:
boolean b = list.remove("我");
System.out.println(list);
结果
4.元素类型 get(int index);
返回 index 位置的元素
System.out.println(list.get(0));
结果
5.元素类型 set(int index, 元素类型 e);
用新的元素 e 替换 index 位置的元素,并返回 index 位置的原来的元素。
添加代码
System.out.println(list.set(1,"谁"));
System.out.println(list);
结果
6.boolean contains(元素类型 e);
通过遍历的方式,判断顺序表中是否包含该元素,包含返回true,否则返回false。
代码
System.out.println(list.contains("我"));
结果
7.int indexOf(元素类型 e);
返回该元素从前往后找的首次遇到的下标,如果没找到返回-1
代码
System.out.println(list.indexOf("ta"));
结果
8.int lastIndexOf(元素类型 e);
返回该元素从后往前找的首次遇到的下标,如果没找到返回-1
代码
System.out.println(list.lastIndexOf("谁"));
结果
9.void clear();
清空一个顺序表,无论原来顺序表中有没有元素,调用该方法后,size==0
代码
list.clear();
System.out.println(list);
结果
10.int size();
返回顺序表中当前已有的元素个数
System.out.println(list.size());
结果
11.boolean isEmpty();
判断顺序表是否为空,空返回true,非空返回false
System.out.println(list.isEmpty());
结果
空顺序表有两种情况
总结
核心:
1.顺序表中不允许出现空洞
2.index 的下标合法取值——肯定和size() 有关
add: [0,size]
remove/get/set: [0,size)
常见方法关系
这个组织ArrayList不是十分懂,先记录下来