首页 > 编程语言 >大数据学习记录,Java基础(2)

大数据学习记录,Java基础(2)

时间:2025-01-14 21:56:29浏览次数:1  
标签:arr Java 记录 int 元素 数据类型 学习 数组 new

数组

数组的概述

数组:

  • 是一个可以存储同一种数据类型元素的容器,对于同一个数组而言,里面的元素数据类型都是一样。
  • 数组长度是固定大小的,其实一块内存中的连续空间,数组一旦创建,长度不可变
  • 数组具有索引的概念,从左向右,从0开始

数组的特点:

  • 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。

  • 数组,一旦初始化完成,其长度就是确定的。数组的长度一旦确定,就不能修改

  • 数组具有索引的概念,从左向右,从0开始

数组的分类:

1、按照元素类型分:

  • 基本数据类型元素的数组:每个元素位置存储基本数据类型的值
  • 引用数据类型元素的数组:每个元素位置存储对象(本质是存储对象的首地址)(在面向对象部分讲解)

2、按照维度分:

  • 一维数组:存储一组数据
  • 二维数组:存储多组数据,相当于二维表,一行代表一组数据。

一维数组

一维数组的声明

格式:

//推荐
元素的数据类型[] 一维数组的名称;

//不推荐
元素的数据类型  一维数组名[];

数组的静态初始化:

  • 语句定义格式: 数据类型[] 数组名 = new 数据类型[m];
1.数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,...};
    
2.数据类型[] 数组名;
  数组名 = new 数据类型[]{元素1,元素2,元素3,...};

3.数据类型[] 数组名 = {元素1,元素2,元素3...};//必须在一个语句中完成,不能分成两个语句写

例如:

int[] arr = new int[]{1,2,3,4,5};

//或
int[] arr;
arr = new int[]{1,2,3,4,5};

//或
int[] arr = {1,2,3,4,5};

数组的动态初始化:

数组变量的初始化和数组元素的赋值操作分开进行,即为动态初始化。

当我们使用动态初始化方式创建数组时,元素值是默认值0。

动态初始化中,只确定了元素的个数(即数组的长度),而元素值此时只是默认值,还并未真正赋自己期望的值。真正期望的数据需要后续单独一个一个赋值。

格式:

数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];

或

数组存储的数据类型[] 数组名字;
数组名字 = new 数组存储的数据类型[长度];

例如:

int[] arr = new int[5];

int[] arr;
arr = new int[5];

一维数组的使用

数组的长度

  • 数组的元素总个数,即数组的长度
  • 每个数组都有一个属性length指明它的长度,例如:array.length 指明数组arr的长度
  • 每个数组都具有长度,而且一旦初始化,其长度就是确定,且是不可变的

数组元素的引用

每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个编号称为数组索引或下标,可以通过数组的索引/下标访问到数组中的元素。

索引范围**

Java中数组的索引从[0]开始,索引范围是[0, 数组的长度-1],即[0, 数组名.length-1]

一维数组的遍历

例:

 public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5};
        //打印数组的属性,输出结果是5
        System.out.println("数组的长度:" + arr.length);

        //遍历输出数组中的元素
        System.out.println("数组的元素有:");
        for(int i=0; i<arr.length; i++){
            System.out.println(arr[i]);
        }
    }

二维数组

二维数组:元素为一维数组的数组

二维数组的定义

语句定义格式1:
数据类型[][] 数组名 = new 数据类型[m][n];

​ 举例:创建由3个长度为4的一维数组组成的二维数组,元素是int类型

​ int[][] arr1 = new int[3][4];
​ int[] arr2[] = new int[3][4];
​ int arr3[][] = new int[3][4];
​ int [] [] arr4 = new int[3][4];

public static void main(String[] args) {
          int[][] arr1 = new int[3][4];
//        int[] arr2[] = new int[3][4];
//        int arr3[][] = new int[3][4];
//        int [] [] arr4 = new int[3][4];
        System.out.println(arr1);
        System.out.println(arr1[0]);  // 获取第一个一维数组
        System.out.println(arr1[0][0]); //获取第一个一维数组中的第一个元素
    }

二维数组语句定义格式2:
数据类型[][] 数组名 = new 数据类型[m][];

public static void main(String[] args) {
        int[][] arr1 = new int[3][];
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);

        System.out.println("------------------------");
        int[] arr2 = {1,2,3,4,5};
        int[] arr3 = {1,2,3};
        int[] arr4 = {1,2,3,4,5,6,7,8};
        arr1[0] = arr2;
        arr1[1] = arr3;
        arr1[2] = arr4;
        System.out.println(arr1[0]);
        System.out.println(arr1[1]);
        System.out.println(arr1[2]);
    }

二维数组语句定义格式3:
数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2,..},{元素1,元素2,..},{元素1,元素2,..},....};

简化写法:数据类型[][] 数组名 = {{元素1,元素2,..},{元素1,元素2,..},{元素1,元素2,..},....};

 public static void main(String[] args) {
        /*
            int[] arr2 = {1,2,3,4,5};
            int[] arr3 = {1,2,3};
            int[] arr4 = {1,2,3,4,5,6,7,8};
         */
//      int[][] arr1 = new int[][]{{1,2,3,4,5},{1,2,3},{1,2,3,4,5,6,7,8}};
        int[][] arr1 = {{1,2,3,4,5},{1,2,3},{1,2,3,4,5,6,7,8}};

        //获取第3个一维数组中的第4个元素
        System.out.println(arr1[2][3]);
    }

二维数组的初始化

静态初始化:

格式:

int[][] arr = new int[][]{{3,8,2},{2,7},{9,0,1,6}};

说明:定义一个名称为arr的二维数组,二维数组中有三个一维数组

  • 每一个一维数组中具体元素也都已初始化
    • 第一个一维数组 arr[0] = {3,8,2};
    • 第二个一维数组 arr[1] = {2,7};
    • 第三个一维数组 arr[2] = {9,0,1,6};
  • 第三个一维数组的长度表示方式:arr[2].length;

动态初始化:

如果二维数组的每一个数据,甚至是每一行的列数,需要后期单独确定,那么就只能使用动态初始化方式了。动态初始化方式分为两种格式:

格式1:规则二维表:每一行的列数是相同的

例:

int[][] arr = new int[3][2];

说明:

  • 定义了名称为arr的二维数组
  • 二维数组中有3个一维数组
  • 每一个一维数组中有2个元素

格式2:不规则:每一行的列数不一样

例:

int[][] arr = new int[3][];

说明:

  • 二维数组中有3个一维数组。
  • 每个一维数组都是默认初始化值null(注意与一维数组默认值区分)

二维数组的遍历:

public class Array2Demo4 {
    public static void main(String[] args) {
        int[][] arr1 = {{1, 2, 3, 4, 5}, {1, 2, 3}, {1, 2, 3, 4, 5, 6, 7, 8}};
        //双重for循环
//        for(int i=0;i<arr1.length;i++){ // 得到每个一维数组
//            for(int j=0;j<arr1[i].length;j++){ // 得到每个一维数组中每个元素
//                System.out.println(arr1[i][j]);
//            }
//            System.out.println("----------------------");
//        }

        for(int i=0;i<arr1.length;i++){ // 得到每个一维数组
            printIntArray(arr1[i]);
            System.out.println("====");
        }
    }

    public static void printIntArray(int[] array) {
        for (int i = 0; i < array.length; i++) {
            if (i == 0) {
                System.out.print("[" + array[i] + ",");
            } else if (i == array.length - 1) {
                System.out.println(array[i] + "]");
            } else {
                System.out.print(array[i] + ",");
            }
        }
    }
}

数组的常见算法

数值型数组特征值统计

数组统计:求总和、均值

		int[] arr = {4,5,6,1,9};
        //求总和、均值
        int sum = 0;//因为0加上任何数都不影响结果
        for(int i=0; i<arr.length; i++){
            sum += arr[i];
        }
        double avg = (double)sum/arr.length;

        System.out.println("sum = " + sum);
        System.out.println("avg = " + avg);

数组获取最值(获取数组中的最大值最小值)
**

public class ArrayDemo7 {
    public static void main(String[] args) {
        int[] arr3 = {123, 4, 1, 3, 6};

        int maxNum2 = getMaxNumber(arr3);
        System.out.println("数组中的最大值为:" + maxNum2);
        int minNum2 = getMinNumber(arr3);
        System.out.println("数组中的最小值为:" + minNum2);
    }
    /*
       定义一个方法所需要考虑的东西:
       1、返回值类型 int
       2、参数类型和个数 int[] arr
   */
    public static int getMinNumber(int[] arr) {
        if (arr == null) {
            return -1;
        }
        //默认将第一个元素作为最小值
        int minNum = arr[0];
        //从第二个元素遍历数组,与minNum变量值进行比较,如果比它小,直接覆盖旧值
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] < minNum) {
                minNum = arr[i];
            }
        }
        return minNum;
    }

    /*
       定义一个方法所需要考虑的东西:
       1、返回值类型 int
       2、参数类型和个数 int[] arr
   */
    public static int getMaxNumber(int[] arr) {
        if (arr == null) {
            return -1;
        }
        //默认将第一个元素作为最大值
        int maxNum = arr[0];
        //从第二个元素遍历数组,与maxNum变量值进行比较,如果比它大,直接覆盖旧值
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > maxNum) {
                maxNum = arr[i];
            }
        }
        return maxNum;
    }
}

数组元素逆序**

public class ArrayReverse {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        System.out.println("反转之前:");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

        //反转
         /*
        思路:首尾对应位置的元素交换
        (1)确定交换几次
           次数 = 数组.length / 2
        (2)谁和谁交换
        for(int i=0; i<次数; i++){
             int temp = arr[i];
             arr[i] = arr[arr.length-1-i];
             arr[arr.length-1-i] = temp;
        }
         */
        for(int i=0; i<arr.length/2; i++){
            int temp = arr[i];
            arr[i] = arr[arr.length-1-i];
            arr[arr.length-1-i] = temp;
        }

        System.out.println("反转之后:");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

}

标签:arr,Java,记录,int,元素,数据类型,学习,数组,new
From: https://www.cnblogs.com/yinzhanpeng123/p/18671494

相关文章

  • 【学习笔记】函数复合:[PKUSC 2024] 排队
    函数复合是这样的一类问题:有一个函数序列\(f_1,f_2,f_3,...,f_n\)。离线询问,给定参数\(x\),\(f_r(f_{r-1}(...f_l(x)))\)的值。有点抽象对吧。看道题就懂了。[PKUSC2024]排队QOJ题目链接:#8672.排队。(反正我在其他OJ上没找到)前置知识:平衡树题面上有简化题意,但......
  • 【Javascript Day6】for循环练习及数组
    目录for循环练习数组1.构造数组2.字面量数组创建3.数组的遍历循环4.length的使用规则for循环练习按输入弹窗行数画菱形(奇偶皆可)varpro=prompt("请输入行数")varsum="";for(vari=1;i<=pro;i++){if(i<=parseInt((pro*1+1)/2)......
  • JavaScript ——节点操作
    节点操作1.创建节点document.createElement('节点')参数:标签名字符串。说明:这些元素原先不存在,是根据需求动态生成的,因此也称为动态创建元素节点。该方法会将创建好的对象作为返回值返回。2.创建文本document.createTextNode() 可以用来创建一个文本节点对象。参数:文......
  • JavaScript详解 ——函数
    1、函数的概念在JS里面,可能会定义非常多的相同代码或者功能相似的代码,这些代码需要大量重复使用函数:就是封装一段可被重复调用执行的代码块。通过代码块可以实现在需要的的重复使用,使用typeof检查一个函数对象时,会返回function函数的封装是把一个或者多个功能通过函数的方式......
  • 假期学习第一日——低效
    今天是2025.1.14,我不知道其余人在假期学习的状态是什么样子的,今天晚上是我第一天看书《程序员的修炼之道》,我学习的状态也不是什么都不知道,比如我知道我学习的“注重实效的哲学”,里面有“石头汤”和“青蛙汤”的故事,还有“你的知识资产”,你说你看了吧,我是花费了半个小时去了解......
  • 学习数学的路线
    转载非数学专业想自学数学,大佬们有什么建议吗?-雪王爱数学的回答-知乎分析学是研究函数积分和算子和微分方程的,代数学是研究运算结构的,几何学和拓扑学是研究空间的。首先一开始的要先学数学分析,高等代数,抽象代数。接着数学分析学完后就学复分析,点集拓扑,再接着学微分流形(前置......
  • 注意力机制:深度学习中的关键技术
    LLM架构从基础到精通之注意力机制本文2w字,阅读时长~~看速度2025年01月14日晴零下3度1.LLM大模型架构专栏||从NLP基础谈起2.LLM大模型架构专栏||自然语言处理(NLP)之建模3.LLM大模型架构之词嵌入(Part1)4.LLM大模型架构之词嵌入(Part2)5.LLM大模型架构之词嵌入(Part3......
  • WebScoket学习笔记
    WebScoket学习笔记1.消息推送常用方式介绍轮询浏览器以指定的时间间隔向服务器发出HTTP请求,服务器实时返回数据给浏览器。长轮询浏览器发出ajax请求,服务器端接收到请求后,会阻塞请求直到有数据或者超时才返回。SSEserver-sent-event:服务器发送事件SSE是在服务器和客户......
  • Agent学习
    最新AIAgent万字综述分享!Anthropic最新:AIAgents2024年度总结!AIAgent=大模型+记忆+规划+工具使用两种思维方式:CoT和ReAct,都可以通过Prompt的设计来控制构建块、工作流和Agent构建块:增强型LLM工作流程:提示链接工作流程:路由工作流程:并行化工作流程:Orchestrator......
  • 关于python的初步学习
    python中的数据类型:整数(int):用于表示整数,例如-5,0,10等。浮点数(float):用于表示小数,例如3.14,-0.5等。字符串(str):用于表示文本,例如"Hello",'World'等。布尔值(bool):用于表示真或假,只有两个值,True和False。列表(list):用于存储一组有序的数据,可以包含不同类型的元素,例如[1,2,3]......