4.数组笔记
数组概念
数组是一种基本的数据结构,用于存储固定大小的相同类型的元素序列。在Java中,数组是一种对象,它实现了java.lang.Cloneable
和java.io.Serializable
接口。
-
声明数组:
int[] intArray;
-
初始化数组:
intArray = new int[10]; // 创建一个长度为10的整型数组
-
访问数组元素:
intArray[0] = 1; // 访问并赋值数组的第一个元素
-
数组的长度:
int length = intArray.length; // 获取数组的长度
一堆数组
Java允许创建数组的数组,即数组的元素本身也是数组。这种数组称为多维数组,但本质上仍然是一维数组的集合。
-
声明和初始化二维数组:
int[][] twoDimArray = new int[3][4]; // 创建一个3行4列的二维数组
-
访问二维数组元素:
twoDimArray[0][0] = 1; // 访问二维数组的第一个元素
数组的算法
数组是许多算法的基础,因为它们提供了一种快速访问和修改大量数据的方式。以下是一些常见的数组算法:
-
排序:
-
选择排序(Selection Sort)
- 工作原理:选择最小的元素与数组的当前位置进行交换,然后从剩余的未排序元素中继续选择最小的元素。
-
插入排序(Insertion Sort)
- 工作原理:构建有序序列,对未排序数据从后向前扫描,找到相应位置并插入。
-
归并排序(Merge Sort)
- 工作原理:采用分治法,将数组分成两半,对每一半进行排序,然后将排序好的两半合并在一起。
-
快速排序(Quick Sort)
- 工作原理:选择一个“基准”元素,将数组分为两个子数组,一个包含小于基准的元素,另一个包含大于基准的元素,然后递归地对这两个子数组进行快速排序。
-
堆排序(Heap Sort)
- 工作原理:利用堆这种数据结构所设计的一种排序算法,将待排序数组构建成一个最大堆,然后将堆顶元素与末尾元素交换,缩小堆的范围,并下沉调整。
-
希尔排序(Shell Sort)
- 工作原理:是插入排序的一种更高效的改进版本,它通过引入增量的概念使得数组部分有序,增量逐渐减小,最终增量为1时变为插入排序。
-
计数排序(Counting Sort)
- 工作原理:非基于比较的排序算法,适用于一定范围内的整数排序,通过统计每个元素出现的次数,然后按顺序构建最终的排序数组。
-
桶排序(Bucket Sort)
- 工作原理:将数组分到有限数量的桶里,每个桶再分别排序(使用其他排序算法)。
-
基数排序(Radix Sort)
- 工作原理:按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。
-
冒泡排序优化版(Optimized Bubble Sort)
- 工作原理:在冒泡排序的基础上增加一个标志位,如果在某次遍历中没有发生任何交换,则数组已经排序完成,可以提前结束。
-
-
搜索:如线性搜索、二分搜索等。
-
反转数组:将数组的元素顺序颠倒。
-
复制数组:创建数组的一个副本。
示例:冒泡排序
void bubbleSort(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
for (int j = 0; j < array.length - i - 1; j++) {
if (array[j] > array[j + 1]) {
// 交换元素
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
多维数组
多维数组在Java中是通过数组的数组实现的,可以看作是数组元素本身也是数组。最常见的是二维数组,但Java支持更高维度的数组。
-
声明多维数组:
int[][][] threeDimArray = new int[2][3][4]; // 创建一个三维数组
-
初始化多维数组:
int[][] twoDimArray = { {1, 2, 3}, {4, 5, 6} }; // 创建并初始化一个二维数组
-
访问多维数组元素:
threeDimArray[0][1][2] = 7; // 访问三维数组的一个元素
多维数组在处理矩阵、图像处理、游戏地图等应用中非常有用。它们提供了一种结构化的方式来存储和操作复杂数据集。
5.方法笔记
方法的作用
方法(Method)是执行特定任务的代码块,它允许将代码逻辑组织和封装起来,以便于重用和维护。
- 封装性:方法将数据和操作这些数据的代码封装在一起。
- 重用性:通过定义方法,可以在多个地方调用,避免代码重复。
- 抽象性:方法提供了一种抽象层次,隐藏了实现细节。
方法的定义
方法由方法名、返回类型、参数列表和方法体组成。
- 返回类型:指明方法执行后返回的数据类型,如果是
void
则表示没有返回值。 - 方法名:遵循驼峰命名法,首字母小写,后续单词首字母大写。
- 参数列表:括号内列出方法接受的参数,参数之间用逗号分隔。
- 方法体:花括号内包含的代码,是方法执行时的具体操作。
public returnType methodName(parameterType param1, parameterType param2) {
// 方法体
}
方法的实参和形参
- 实参(Actual Parameter):调用方法时传递给方法的实际值或变量。
- 形参(Formal Parameter):方法定义中用于接收传递进来的值的变量。
当方法被调用时,实参会复制值给形参,方法内部对形参的修改不会影响到实参。
JVM内存结构划分
Java虚拟机(JVM)的内存结构主要包括以下几个部分:
- 方法区(Method Area):存储类信息、常量、静态变量等。
- 堆(Heap):存储对象实例和数组。
- 栈(Stack):存储方法调用的局部变量、操作栈和方法调用信息。
- 程序计数器(Program Counter Register):存储当前线程执行的字节码的行号指示器。
- 本地方法栈(Native Method Stack):为JVM使用Native方法服务。
当方法被调用时,它的局部变量和参数会被存储在栈中,而新创建的对象会被存储在堆中。
方法的重载
方法的重载(Overloading)是指在同一个类中可以定义多个同名方法,只要它们的参数列表不同(参数的类型、数量或顺序至少有一项不同)。
- 参数数量不同:可以定义接受不同数量参数的方法。
- 参数类型不同:可以定义参数类型不同的同名方法。
- 参数顺序不同:仅改变参数顺序不算是重载,因为Java通过参数的类型来区分方法。
重载的方法可以有不同的返回类型,但返回类型不是重载的条件。
示例
public class Example {
// 方法重载示例
public void display(int a) {
System.out.println("只有一个整数参数: " + a);
}
public void display(int a, int b) {
System.out.println("有两个整数参数: " + a + " 和 " + b);
}
public void display(String a) {
System.out.println("有一个字符串参数: " + a);
}
}
标签:Sort,java,int,元素,笔记,数组,排序,方法
From: https://www.cnblogs.com/cjsbx/p/18336298