Java数组总结

news2024/11/23 12:35:32

在这里插入图片描述


这里写目录标题

  • 一、概念
  • 二、几个相关的概念
  • 三、数组的特点
  • 四、复习:变量按照数据类型的分类
  • 五、数组的分类
  • 六、一维数组的使用(6个基本点)
  • 七、数组元素的默认初始值的情况
  • 八、一维数组的内存解析
  • 九、二维数组
  • 十、数组的常用算法
    • 1、数组的最大值、最小值、总和、平均值
    • 2、数组的扩容与缩容
    • 3、数组的反转
  • 十一、数组工具类Arrays的使用
  • 十二、数组中常见的异常

一、概念

是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
简称:多个数据的组合
Java中的容器:数组、集合框架:在内存中对多个数据的存储。

二、几个相关的概念

数组名
数组的元素(即内部存储的多个元素)
数组的下标、角标、下角标、索引、index(即找到指定数组元素所使用的编号)
数组的长度(即数组容器中存储的元素的个数)

三、数组的特点

数组中的元素在内存中是依次紧密排列的,有序的
数组,属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以引用数据类型。
一旦初始化完成,其长度就确定了,并且其长度不可更改。(因为内存原因)

四、复习:变量按照数据类型的分类

基本数据类型:byte \ short \ int \ long ;float \ double ;char \ boolean
引用数据类型:类、数组、接口、枚举、注解、记录

五、数组的分类

按照元素的类型:基本数据类型元素的数组;引用数据类型元素的数组
按照数组的维数来分:一维数组;二维数组;

六、一维数组的使用(6个基本点)

数组的声明和初始化
调用数组的指定元素
数组的属性:length,表示数组的长度
数组的遍历
数组元素的默认初始化值
一维数组的内存解析(难)

package com.atguigu;

/**
 * package:com.atguigu
 *
 * @Author jimmy-yan
 * @Create 2024/10/13 10:30
 */
public class OneArrayTest {
    public static void main(String[] args) {
        //1、变量的声明和初始化
        int num1 = 10;
        int num2; //初始化
        num2 = 20;   //赋值

        //todo 1.1 声明数组
        double[] prices;
        //todo 1.2 静态初始化:数组变量的初始化与数组元素的赋值同时进行
        prices = new double[]{20, 12, 34.5};

        //todo 数组的声明和初始化,动态初始化。
        String[] foods = new String[4];

        //其他方式
        int[] arr = {};  //类型推断

        //todo 2、数组元素的调用
        //通过角标的方式,获取数组的元素
        //角标从0 开始,到数组的长度-1结束
        System.out.println(prices[0]);
        //System.out.println(prices[4]);  //ArrayIndexOutOfBoundsException

        foods[0] = "米";
        foods[1] = "面";
        foods[2] = "油";
        foods[3] = "肉";
        //foods[4]="菜";  //ArrayIndexOutOfBoundsException


        //todo 3、数组的长度:用来描述数组容器中容量的大小
        //使用length属性表示
        System.out.println(foods.length);   //4
        System.out.println(prices.length);  //3


        //todo 4、如何遍历数组
        for (int i = 0; i < foods.length; i++) {
            System.out.println(foods[i]);
        }
    }
}

七、数组元素的默认初始值的情况

整型数组元素的默认初始化值:0
浮点型数组元素的默认初始化值:0.0
字符型数组元素的默认初始化值:0(或理解为’\u0000’)
boolean型数组元素的默认初始化值:false
引用数据类型数组元素的默认初始化值:null

八、一维数组的内存解析

Java中的内存结构是如何划分的?(主要关心JvM的运行时内存环境)

将内存区域划分为5个部分:程序计数器、虚拟机栈、本地方法栈、堆、方法区。
与目前数组相关的内存结构: 比如: int[] arr = new int[]{1,2,3};
栈:用于存放方法中声明的变量。比如:arr
堆:用于存放数组的实体(即数组中的所有元素)。比如:1,2,3

在这里插入图片描述
在这里插入图片描述

九、二维数组

数组的声明和初始化
int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 6}, {6, 7, 8}};
动态初始化1
int[][] arr1 = new int[3][3];
动态初始化2
int[][] arr2 = new int[3][];

package com.atguigu;

/**
 * package:com.atguigu
 *
 * @Author jimmy-yan
 * @Create 2024/10/13 18:56
 */

public class TwoArrayTest {
    public static void main(String[] args) {
        //1、数组的声明和初始化
        int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 6}, {6, 7, 8}};

        //2、动态初始化1
        int[][] arr1 = new int[3][3];
        //2、动态初始化2
        int[][] arr2 = new int[3][];

        //3、数组元素的调用
        //针对arr来说,外层元素{1,2,3},{4,5,6},{6,7,8};内层元素1,2,3,4,5,6,6,7,8
        System.out.println(arr[0][1]);  //2
        System.out.println(arr[0]);      //[I@5594a1b5

        arr1[0][1] = 8;
        System.out.println(arr1[0][1]);  //8
        System.out.println(arr1[0]);  //[I@6a5fc7f7

        //数组的长度
        System.out.println(arr1.length);  //3
        System.out.println(arr1[0].length);  //3


        //数组遍历
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println();
        }


    }
}

十、数组的常用算法

1、数组的最大值、最小值、总和、平均值

package com.atguigu;

/**
 * package:com.atguigu
 *
 * @Author jimmy-yan
 * @Create 2024/10/13 22:44
 */
public class ArrayExer1 {
    public static void main(String[] args) {
        //1、动态创建数组
        int[] arr = new int[10];
        //2、通过循环给数组进行赋值
        for (int i = 0 ; i<arr.length;i++){
            arr[i] = (int)(Math.random()*(99-10+1))+10;
        }

        //3、求最大值
        int max = arr[0];
        for (int i=0;i<arr.length;i++){
            if (max<arr[i]){
                max=arr[i];
            }
        }
        System.out.println("最大值为:"+max);


        //4、求最小值
        int min = arr[0];
        for (int i=0;i<arr.length;i++){
            if (min>arr[i]){
                min=arr[i];
            }
        }
        System.out.println("最小值为:"+min);


        //5、求总和
        int sum = 0;
        for (int i=0;i<arr.length;i++){
            sum+=arr[i];
        }
        System.out.println("总和为:"+sum);

        //6、求平均值
        int avg=sum/arr.length;
        System.out.println("平均值为:"+avg);


    }
}

2、数组的扩容与缩容

package com.atguigu;

/**
 * package:com.atguigu
 *
 * @Author jimmy-yan
 * @Create 2024/10/13 23:30
 */
public class ArrayExer2 {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3, 4, 5};

        //todo 扩容1倍容量
        int[] newArr = new int[arr.length * 2];

        //将原有的数组中的元素复制到新的数组中
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];

        }
        //将10,20,3添加到新数组
        newArr[arr.length] = 10;
        newArr[arr.length + 1] = 20;
        newArr[arr.length + 2] = 30;

        //将新数组的地址赋值到旧数组
        arr = newArr;

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");
        }

    }
}

package com.atguigu;

/**
 * package:com.atguigu
 *
 * @Author jimmy-yan
 * @Create 2024/10/13 23:39
 */
public class ArrayExer3 {
    public static void main(String[] args) {
        //todo 数组的缩容
        int [] arr = {1,2,3,4,5,6,7};

        int deleteIndex = 4;
        //不新建数组
        for(int i=deleteIndex;i<arr.length-1;i++){
            arr[i]=arr[i+1];
        }
        arr[arr.length-1]=0;

        for(int i=0;i<arr.length-1;i++){
            System.out.print(arr[i]+"\t");
        }
    }
}

3、数组的反转

package com.atguigu;

/**
 * package:com.atguigu
 *
 * @Author jimmy-yan
 * @Create 2024/10/13 23:18
 */
public class ArrayReverse {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7};
        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;
        }

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }

    }
}

十一、数组工具类Arrays的使用

equals:比较两个数组的元素是否依次相等

System.out.println(arr1 == arr2); 比较的是地址是否相等

int[] arr1 = new int[]{1, 2, 3, 4, 5};
int[] arr2 = new int[]{1, 2, 3, 4, 5};
System.out.println(arr1 == arr2);  //比较的是地址 false

toString:输出数组的值

直接打印数组,则输出的是数组的地址
System.out.println(arr1); //[I@6a5fc7f7

int[] arr1 = new int[]{1, 2, 3, 4, 5};
System.out.println(arr1);  //[I@6a5fc7f7

sort:排序
binarySearch:查找

  • 只要返回的是负数就算没有找到

fill:填充

package com.atguigu;

import java.util.Arrays;

/**
 * package:com.atguigu
 *
 * @Author jimmy-yan
 * @Create 2024/10/14 9:27
 */
public class ArraysUtils {
    public static void main(String[] args) {
        //1、boolean equals(int[] a,int[] b):比较两个数组的元素是否依次相等
        int[] arr1 = new int[]{1, 2, 3, 4, 5};
        int[] arr2 = new int[]{1, 2, 3, 4, 5};
        System.out.println(arr1 == arr2);  //比较的是地址 false
        boolean isEquals = Arrays.equals(arr1, arr2);
        System.out.println(isEquals);   //比较的是值 true

        //2、输出数组的值
        System.out.println(Arrays.toString(arr1));  //[1, 2, 3, 4, 5]

        //3、填充
        Arrays.fill(arr1, 10);
        System.out.println(Arrays.toString(arr1));  //[10, 10, 10, 10, 10]


        //4、排序
        int[] arr3 = new int[]{10, 5, 7, 3, 7};
        Arrays.sort(arr3);
        System.out.println(Arrays.toString(arr3));


        //5、查找,前提数组必须是有序的
        int[] arr4 = new int[]{2, 4, 5, 6, 7, 9};
        int index = Arrays.binarySearch(arr4, 5);
        System.out.println(index);   //2
        int index1 = Arrays.binarySearch(arr4, 8);
        System.out.println(index1);  //-6,只要返回的是负数就算没有找到
    }
}


十二、数组中常见的异常

数组角标越界异常:ArrayIndexOutOfBoundsException
空指针异常:NullPointerException

package com.atguigu;

import java.util.Arrays;

/**
 * package:com.atguigu
 *
 * @Author jimmy-yan
 * @Create 2024/10/14 9:27
 */
public class ArraysUtils {
    public static void main(String[] args) {
        //todo 数组角标越界异常:ArrayIndexOutOfBoundsException
        int[] arr = new int[10];
//        System.out.println(arr[10]);  //ArrayIndexOutOfBoundsException
//        System.out.println(arr[-1]);  //todo ArrayIndexOutOfBoundsException   python可以使用负索引

        //todo 空指针异常:NullPointerException
        //情况1:
//        int[] arr5 = new int[10];
//        arr1=null;
//        System.out.println(arr1[0]);  //NullPointerException

    }
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2212814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

翻译难题一扫光!2024年精选4款神器,推荐给每一个需要的你

咱们现在生活在一个信息多得跟潮水一样扑过来的时代&#xff0c;翻译可不只是简单地把一种语言换成另一种语言那么简单了。它更像是连接不同文化和国家的坚固桥梁&#xff0c;也是让知识快速传播的超级加速器。随着科技的飞速发展&#xff0c;翻译工具也迎来了翻天覆地的变化。…

python画图|三维动态柱状图绘制

【1】引言 前序已经学习了二维动态柱状图绘制教程&#xff0c;本次尝试探索三维动态柱状图绘制教程&#xff1a; 【2】项目设计 三维和二维的不同&#xff0c;要在一开始就定义。 二维的定义简单粗暴&#xff0c;只需要一行代码&#xff1a; fig, ax plt.subplots() # 定…

【动手学深度学习】6.6. 卷积神经网络(LeNet)(个人向笔记)

之前我们对Fashion-MNIST数据集的每一张图片进行展平&#xff0c;并用全连接层进行处理。现在我们可以用卷积神经网络来代替它了&#xff01;用卷积层处理可以在图像中保留空间结构&#xff0c;同时模型更简洁&#xff0c;所需参数更少本节将介绍LeNet&#xff0c;它是最早发布…

python学习-怎么在Pycharm写代码

打开Pycharm&#xff0c;点击文件-新建项目 2.选择pure python-点击箭头 展开 3.选择 Existing interpreter 如果 Existing interpreter 下没有相关环境 &#xff08;1&#xff09;点击**…** &#xff08;2&#xff09;选择python的安装路径 4.可修改文件名称-点击创建 …

低功耗4G边缘采集网关——一块电池、一个网关 覆盖90%低功耗场景

低功耗4G边缘采集网关——一块电池、一个网关 覆盖90%低功耗场景 一、简介 历经几个月的研发&#xff0c;DEVELOPLINK 终于推出了低功耗系列采集网关。如果你有低功耗采集的需求, 可以仔细阅读这篇文章&#xff0c;了解一下低功耗系列采集网关的基本情况。 研发的初衷&#…

基于SpringBoot的医院信息管理平台

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的医院信息管理平台&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQ…

xss-labs靶场第八关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、注入点寻找 2、使用hackbar进行payload测试 3、绕过结果 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机&#xff1a;本机(127.0.0.1) 靶 机&#xff1a;本机(127.0.0.…

springboot大学校园用电数据管理与可视化系统-计算机毕业设计源码87507

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 用户注册流程 2.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设计 3.1 系统架构设计…

抖音视频制作怎么暂停画面,抖音视频怎么让它有暂停的效果

千万别滥用视频特效&#xff0c;不然它能毁掉你的抖音作品。在创作过程中&#xff0c;应尽量使用类似暂停画面、隐形字幕这样的视觉特效&#xff0c;可以显著提高作品的视觉体验。增强视频表现力的同时&#xff0c;也不会让画面看起来过于夸张。有关抖音视频制作怎么暂停画面的…

WIN10右键-打开方式-选择其他应用:该文件没有与之关联的应用来执行该操作...解决办法

WIN10右键-打开方式-选择其他应用&#xff1a;该文件没有与之关联的应用来执行该操作…解决办法 问题描述 鼠标右键->打开方式->选择其他应用&#xff0c;提示错误&#xff1a;该文件没有与之关联的应用来执行该操作。请安装应用&#xff0c;若已经安装应用&#xff0c;…

重学SpringBoot3-集成Redis(十二)之点赞功能实现

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;十二&#xff09;之点赞功能实现 1. 点赞功能的场景分析2. 项目环境配置2.1. 依赖引入2.2. Redis 配置 3. 点赞功能的实现3.1. 点…

Spring Boot课程问答:一键解决疑惑

1系统概述 1.1 研究背景 如今互联网高速发展&#xff0c;网络遍布全球&#xff0c;通过互联网发布的消息能快而方便的传播到世界每个角落&#xff0c;并且互联网上能传播的信息也很广&#xff0c;比如文字、图片、声音、视频等。从而&#xff0c;这种种好处使得互联网成了信息传…

【vue+printJs】前端打印, 自定义字体大小, 自定义样式, 封装共享样式

效果示例 思维导图 目录 1,基本使用1, 依赖下载2, 页面导入3, 修改字体大小(可行但不推荐) 2, 自定义样式,字体大小1, 修改字体大小(推荐)2, 自定义样式3, 封装共享样式 3, 去除页面页脚内容4, 测试案例demo, 直接cv可用5, print-js的其他参数说明 1,基本使用 1, 依赖下载 …

【SpringBoot详细教程】-14-Spring Secruity 安全管理【持续更新】

&#x1f332; Spring Security 基本原理 &#x1f33f; Spring Security简介 Spring Security 是基于Spring框架&#xff0c;提供的一套Web应用安全性的完整解决方案&#xff0c;一般来说&#xff0c;Web应用的安全性包含 用户认证&#xff08;Authentication&#xff09;和…

JavaScript全面指南(三)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Javascript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来javascript篇专栏内容:JavaScript全面指南(三) 目录 41、构造函数Fn&#xff0c;原型对象&#xff0c;实例…

SpringBoot助力高校学科竞赛平台的快速开发

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

【数据处理】大数据入门

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;软件开发必备知识_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 1. 前言 本…

【C】C语言常见概念~

C语言常见概念 转义字符 转义字符&#xff0c;顾名思义&#xff0c;转变原来意思的字符 比如 #include <stdio.h> int main() {printf("abcndef");return 0; }输出的结果为&#xff1a; 将代码修改一下&#xff1a; #include <stdio.h> int main(…

如何创建诊断数据库模板(CDDT)

创建一个新的模板文件有两种方式&#xff1a; 1.修改现有模板形成自定义的模板 CANdelaStudio 21提供了基本范本&#xff0c;Vector_UDS_21.cddt&#xff0c;存放在C:\Users\Public\Documents\Vector\CANdelaStudio\21\Examples目录下。打开CANdelaStudio软件后&#xff0c;点击…

鸿蒙开发案例:HarmonyOS NEXT语法实现2048

【实现的功能】 • 游戏逻辑&#xff1a;实现了2048游戏的核心逻辑&#xff0c;包括初始化游戏盘面、添加随机方块、处理四个方向的滑动操作等。 • UI展示&#xff1a;构建了游戏的用户界面&#xff0c;显示得分、游戏盘面&#xff0c;并提供了重新开始按钮。 • 用户交互&…