数组、链表、堆、栈、队列、树、哈希、图
一、数组
1.简述
数组是一种基本线性结构的数据结构,可以存储基本类型数据或对象,连续的存储空间和
数组的元素是可以重复的。数组只是存储元素的容器,它不对元素的值做任何限制
一旦创建,其大小就是固定的,不能动态地增加或减少元素。
2.例子
2.1基本类型
2.1.1 定义了一个数组
int[ ] arr = new int[ ];
2.1.2 通过索引给数组中的每个元素赋值
arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] = 4; arr[4] = 5;
2.1.3 通过索引来访问或修改数组中的元素
// 访问第一个元素,结果是1 int firstElement = arr[0];
// 访问第二个元素,结果是2 int thirdElement = arr[2];
// 修改数组中的元素 arr[0] = 20;
// 将第二个元素修改为10 arr[1] = 10;
2
.1.4
在Java中,数组的大小是固定的,不能直接删除元素。但是你可以通过创建一个新的数
组,然后将原数组中除了第一个元素之外的其他元素复制到新数组中,从而实现删除第一个
元素的效果。
// 创建一个新的数组,其长度比原数组小1 int[] newArr = new int[arr.length - 1];
// 将原数组中除了第一个元素之外的其他元素复制到新数组中
System.arraycopy(arr, 1, newArr, 0, newArr.length);
// 更新arr,使其指向新数组 arr = newArr;
2.2对象类型
2.2.1// 创建一个可以存储3个Person对象的数组
Person[] persons = new Person[3];
2.2.2// 在数组的第三个位置分别存储一个Person对象
persons[0] = new Person("张三", 20);
persons[1] = new Person("李四", 25);
persons[2] = new Person("王五", 30);
2.2.3// 访问数组中的第一个元素 Person firstPerson = persons[0];
// 修改数组中的元素 persons[1] = new Person("赵六", 28);
二、链表(单链表,双链表,循环链表,双向循环链表):
1.简述
链式的线性表,采用链式存储(非连续、非顺序的内存空间),
链表中的每一个独立的元素被称为结点,故链表由一系列的结点组成。
每个结点都由两部分组成:数据域、指针域。
数据域用来存放当前结点需要存储的数据内容,
指针域用于存放当前结点的下一个结点的地址。如下图所示:
生活举例熟悉概念:假如我们需要存放一堆物品,但没有足够大的空间将所有的物品一次性放
下,此时该如何既放下所有的物品,又能简单的找到所有的物品位置呢?我们可以尝试
采用如下解决方案:存放物品时,每放置一件物品就在该物品上贴一个小纸条,标明下
一件物品放在哪里。这样,我们只需要记住第一件物品的位置,从第一件物品上的小纸
条,就可以找到第二件物品,再根据第二件物品纸条的内容就找到第三件物品。按照这
个方法依次类推,我们便可以找到所有的物品,这就是所谓的链式存储。
2.例子
2.1String类型
2.1.1 定义了一个数组
LinkedList<String> linkedList = new LinkedList<>();
2.1.2 // 在链表头部添加元素 linkedList.addFirst("元素0");
//添加元素linkedList.add("元素1");
// 在链表尾部添加元素 linkedList.addLast("元素4");
2.1.3// 移除链表头部元素 linkedList.removeFirst();
// 移除链表尾部元素 linkedList.removeLast();
//删除第五个元素 linkedList.remove(4);
2.1.4 使用set(int index, E element)方法来修改链表中的某个元素,
其中index是元素在链表中的位置(从0开始计数),element是新的元素。
// 修改链表中第一个元素 linkedList.set(0,"修改元素");
2.5// 获取链表中第一个元素 Person firstPerson = linkedList.get(0);
2.2对象类型
2.2.1 LinkedList<Person> linkedList = new LinkedList<>();
2.2.2 // 创建Person对象 Person person1 = new Person("张三", 20);
Person person2 = new Person("李四", 25);
2.2.3 // 在链表首部添加元素 linkedList.addFirst(person1);
// 在链表尾部添加元素 linkedList.addLast(person2);
2.2.4// 创建Person对象 Person person3 = new Person("王五", 30);
// 修改链表中第一个元素 linkedList.set(0, person3);
熟悉概念:
1.线性结构:
在Java中,线性结构是一种数据结构,它的元素之间存在一对一的线性关系。
线性结构有两种不同的存储方式:顺序存储和链式存储。
顺序存储的线性表称为顺序表,顺序表中的元素在内存中是连续存储的,例如数组。
链式存储的线性表称为链表,链表中的元素在内存中可以是非连续存储的,
元素节点中存放数据元素以及指向下一个节点的指针。
线性结构有以下几个特点:
- 存在唯一的一个被称作“第一个”的元素。
- 存在唯一的一个被称作“最后一个”的元素。
- 除第一个元素外,其他数据元素均有一个前驱。
- 除最后一个元素外,其他数据元素均有一个后继。
在Java中,常见的线性结构包括数组、链表、栈、队列等。
2.内存地址: