java笔记2

4.数组笔记

数组概念

数组是一种基本的数据结构,用于存储固定大小的相同类型的元素序列。在Java中,数组是一种对象,它实现了java.lang.Cloneablejava.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; // 访问二维数组的第一个元素
    

数组的算法

数组是许多算法的基础,因为它们提供了一种快速访问和修改大量数据的方式。以下是一些常见的数组算法:

  • 排序

    1. 选择排序(Selection Sort)

      • 工作原理:选择最小的元素与数组的当前位置进行交换,然后从剩余的未排序元素中继续选择最小的元素。
    2. 插入排序(Insertion Sort)

      • 工作原理:构建有序序列,对未排序数据从后向前扫描,找到相应位置并插入。
    3. 归并排序(Merge Sort)

      • 工作原理:采用分治法,将数组分成两半,对每一半进行排序,然后将排序好的两半合并在一起。
    4. 快速排序(Quick Sort)

      • 工作原理:选择一个“基准”元素,将数组分为两个子数组,一个包含小于基准的元素,另一个包含大于基准的元素,然后递归地对这两个子数组进行快速排序。
    5. 堆排序(Heap Sort)

      • 工作原理:利用堆这种数据结构所设计的一种排序算法,将待排序数组构建成一个最大堆,然后将堆顶元素与末尾元素交换,缩小堆的范围,并下沉调整。
    6. 希尔排序(Shell Sort)

      • 工作原理:是插入排序的一种更高效的改进版本,它通过引入增量的概念使得数组部分有序,增量逐渐减小,最终增量为1时变为插入排序。
    7. 计数排序(Counting Sort)

      • 工作原理:非基于比较的排序算法,适用于一定范围内的整数排序,通过统计每个元素出现的次数,然后按顺序构建最终的排序数组。
    8. 桶排序(Bucket Sort)

      • 工作原理:将数组分到有限数量的桶里,每个桶再分别排序(使用其他排序算法)。
    9. 基数排序(Radix Sort)

      • 工作原理:按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。
    10. 冒泡排序优化版(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)的内存结构主要包括以下几个部分:

  1. 方法区(Method Area):存储类信息、常量、静态变量等。
  2. (Heap):存储对象实例和数组。
  3. (Stack):存储方法调用的局部变量、操作栈和方法调用信息。
  4. 程序计数器(Program Counter Register):存储当前线程执行的字节码的行号指示器。
  5. 本地方法栈(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);
    }
}
posted @   cj睡不醒  阅读(11)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示