Java基础03——数组

news2024/11/24 20:06:04

Java基础03——数组

  • 一、数组介绍
  • 二、数组的定义与静态初始化
    • 1. 定义数组
    • 2. 数组静态初始化
  • 三、数组元素访问
    • 1. 数组的地址值
    • 2. 数组访问
  • 四、数组遍历
  • 五、数组动态初始化
  • 六、数组常见问题
    • 1. 索引越界异常
  • 七、数组常见操作
    • 1. 求最值
    • 2. 求和
    • 3. 交换数据
    • 4. 打乱数据
  • 八、数组内存图
  • 九、二维数组
    • 1. 初始化二维数组
    • 2. 遍历二维数组
    • 3. 不等长二维数组
    • 4. 二维数组地址覆盖

一、数组介绍

什么是数组:

  • 数组指的是一种容器,可以用来存储同种数据类型的多个值。
  • 数组容器在存储数据的时候,需要结合隐式转换考虑。
    • int类型的数组容器(boolean、byte、short、int、double
    • double类型的数组容器(byte、short、int、long、float、double)

二、数组的定义与静态初始化

1. 定义数组

  • 格式一(常用):数据类型[] 数组名
    • int[] array
  • 格式二:数据类型 数组名[]
    • int array[]

2. 数组静态初始化

初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程。
定义数组是给数组名字,初始化数组是给数组开辟内存空间。

  • 格式:数据类型[] 数组名 = new 数据类型[]{元素1, 元素2…};
  • 简化格式:数据类型[] 数组名 = {元素1, 元素2…};
  • 数组静态初始化后,数组长度不能改变
  • 示例:
    public class Main {
        public static void main(String[] args) {
            // 定义数组,存储5个学生的年龄
            int[] age1 = new int[]{11, 12, 13, 14, 15};
            int[] age2 = {11, 12, 13, 14, 15};
    
            // 定义数组,存储3个学生的姓名
            String[] name1 = new String[]{"张三", "李四", "王五"};
            String[] name2 = {"张三", "李四", "王五"};
    
            // 定义数组,存储4个学生的身高
            double[] height1 = new double[]{1.93, 1.75, 1.73, 1.81};
            double[] height2 = {1.93, 1.75, 1.73, 1.81};
        }
    }
    

三、数组元素访问

1. 数组的地址值

  • 如果直接输出数组,会显示数组的地址值。
  • 平时习惯性的把整体叫做数组的地址值。
public class Main {
    public static void main(String[] args) {
        int[] age1 = new int[]{11, 12, 13, 14, 15};
        double[] height1 = new double[]{1.93, 1.75, 1.73, 1.81};
        
        System.out.println(age1);  // [I@2c8d66b2
        System.out.println(height1);  // [D@5a39699c
    }
}

[I@2c8d66b2

[ : 表示当前是一个数组
I : 表示当前数组里面的元素都是int类型
@:表示一个间隔符号(固定格式)
2c8d66b2:数组真正的地址值(十六进制)

2. 数组访问

  • 格式:数组名[索引]
public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4};
        // 返回0索引上对应的元素
        System.out.println(arr[0]);  // 1
        
        // 把数据存储到数组中
        // 数据覆盖后,原来的数据就不存在了。、
        arr[0] = 100;
        System.out.println(arr[0]);  // 100
    }
}

四、数组遍历

  • 数组遍历:指的是取出数据的过程。将数组中所有的内容取出来,取出来后可以(打印、求和、判断…)
  • 遍历示例:
    public class Main {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3};
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    }
    

五、数组动态初始化

  • 初始化时只指定数组长度,由系统为数组分配初始值。
  • 格式:数据类型[] 数组名 = new 数据类型[数组长度];
  • 示例:
    public class Main {
        public static void main(String[] args) {
            // 定义一个数组,存储班级里50个学生的姓名,姓名未知
            String[] name = new String[50];
            name[0] = "张三";
            name[1] = "李四";
            System.out.println(name[0]); // 张三
            System.out.println(name[1]); // 李四
            System.out.println(name[2]); // 打印出来的是默认初始化值null
        }
    }
    
  • 数组默认初始化值的规律:
数据类型默认初始化值
整型0
小数类型0.0
字符类型\u0000 (空格)
布尔类型false
引用数据类型null
  • 静态初始化和动态初始化的区别
    • 静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度。
      • 需求中已经明确了要操作的具体数据,直接静态初始化即可。
    • 动态初始化:手动指定数组长度,由系统给出默认初始化值。
      • 只明确元素个数,不明确具体数值,推荐使用动态初始化。

六、数组常见问题

1. 索引越界异常

  • 原因:访问了不存在的索引
  • 异常类型:ArrayIndexOutOfBoundsException
  • 异常显示:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 55 out of bounds for length 50
	at day05.Main.main(Main.java:11)

七、数组常见操作

1. 求最值

public class Main {
    public static void main(String[] args) {
        int[] arr = {33, 5, 22, 44, 55};
        // 临时认为0索引的数据是最大的
        int max = arr[0];
        // 拿每一个元素跟max进行比较
        // 循环开始条件可以写1
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        System.out.println(max); // 55
    }
}

2. 求和

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random random = new Random();
        // 定义数组
        int[] arr = new int[10];
        // 随机生成10个数存入数组
        for (int i = 0; i < arr.length; i++) {
            int number = random.nextInt(100) + 1;
            arr[i] = number;
        }
        // 数组求和
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        System.out.println("数组中所有数据的和为:" + sum);
        System.out.println("数组中平均数为:" + (sum / arr.length));
    }
}

3. 交换数据

public class Main {
    public static void main(String[] args) {
        // 定义数组
        int[] arr = {1, 2, 3, 4, 5};
        // 遍历交换数据
        for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " "); // 5 4 3 2 1 
        }
    }
}

4. 打乱数据

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random random = new Random();

        // 定义数组
        int[] arr = {1, 2, 3, 4, 5};
        for (int i = 0; i < arr.length; i++) {
            // 生成随机索引
            int randomIndex = random.nextInt(arr.length);
            int temp = arr[i];
            arr[i] = arr[randomIndex];
            arr[randomIndex] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

八、数组内存图

  • java中内存分配
JVM内存空间作用
方法运行时使用的内存,比如main方法运行,进入方法栈中执行
存储对象或数组,new来创建的都存储在堆内存
方法区存储可以运行的class文件
本地方法栈JVM在使用操作系统功能的时候使用,与开发无关
寄存器给CPU使用,与开发无关
  • 栈内存:程序的主入口(main方法),开始执行时会进栈,代码执行完毕会出栈。
  • 堆内存:new出来的东西会在堆内存中开辟空间并产生地址。如果new了多次,会在堆内存中开辟多个地址空间。

在这里插入图片描述

  • 两个数组指向同一个内存空间时,其中一个数组的值发生改变,其他数组的值也会发生改变。
    public class Main {
        public static void main(String[] args) {
            int[] arr1 = {11, 22};
            int[] arr2 = arr1;
    
            System.out.println(arr1[0]);  // 11
            System.out.println(arr2[0]);  // 11
    
            arr2[0] = 33;
    
            System.out.println(arr1[0]);  // 33
            System.out.println(arr2[0]);  // 33
        }
    }
    

九、二维数组

1. 初始化二维数组

  • 静态初始化:
    • 一般格式:数据类型[][] 数组名 = new 数据类型[][] {{元素1, 元素2}, {元素1, 元素2}}
    • 简化格式:数据类型[][] 数组名 = {{元素1, 元素2}, {元素1, 元素2}}
  • 动态初始化:
    • 一般格式:数据类型[][] 数组名 = new 数据类型[m][n]
public class Main {
    public static void main(String[] args) {
        // 静态初始化定义一个二维数组
        int[][] arr1 = {
                {1, 2, 3},
                {4, 5, 6, 7, 8, 9}
        };
        
        // 动态初始化定义一个二维数组
        int[][] arr2 = new int[3][5];
    }
}

2. 遍历二维数组

public class Main {
    public static void main(String[] args) {
        // 动态初始化定义一个二维数组
        int[][] arr2 = new int[3][5];

        // 遍历二维数组
        for (int i = 0; i < arr1.length; i++) {
            for (int k = 0; k < arr1[i].length; k++) {
                System.out.print(arr1[i][k] + " ");
            }
            System.out.println();
        }
    }
}

3. 不等长二维数组

public class Main {
    public static void main(String[] args) {
        int[][] arr = new int[2][];
        int[] arr1 = {11, 22};
        int[] arr2 = {44, 55, 66};
        arr[0] = arr1;
        arr[1] = arr2;
    }
}

4. 二维数组地址覆盖

public class Main {
    public static void main(String[] args) {
        int[][] arr = new int[2][3];
        int[] arr1 = {11, 22};
        int[] arr2 = {44, 55, 66};
        // 新的数组地址覆盖旧地址
        arr[0] = arr1;
        arr[1] = arr2;
    }
}

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

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

相关文章

java企业人事管理系统企业工资考勤系统

简介 Java基于ssm开发的企业人事考勤工资系统&#xff0c;员工可以打卡、请假。系统根据员工的打卡情况自动计算工资&#xff08;全勤、请假、旷工、加班、迟到、早退等计算出最终实发工资&#xff09;&#xff0c;员工还可以查看自己的考勤记录工资具体组成等。升级版加了部长…

Linux——信号知识归纳(中)

目录 一.信号与硬件异常 二.阻塞信号和信号结构 &#xff08;一&#xff09;.信号状态 &#xff08;二&#xff09;.信号结构 ①pending表 ②block表 ③handler表 &#xff08;三&#xff09;.信号处理过程 &#xff08;四&#xff09;.阻塞与忽略的区别 &#xff08…

Linux 中断子系统(二):GIC 中断控制器

GIC 是 ARM 公司给 Cortex-A/R 内核提供的一个中断控制器,类似 Cortex-M 内核(STM32)中的 NVIC。 GIC:Generic Interrupt Controller,通用中断控制器 NVIC:Nested Vectored. Interrupt Controller,嵌套向量中断控制器目前 GIC 有 4 个版本:V1 ~ V4,V1 是最老的版本,已…

react源码解析20.总结第一章的面试题解答

总结 至此我们介绍了react的理念&#xff0c;如果解决cpu和io的瓶颈&#xff0c;关键是实现异步可中断的更新 我们介绍了react源码架构&#xff08;uifn(state)&#xff09;&#xff0c;从scheduler开始调度&#xff08;根据过期事件判断优先级&#xff09;&#xff0c;经过r…

测试开发 | Jenkins job 机制该如何使用?

Jenkins 像老板一样管理各种 job 。job 是 Jenkins 的一个执行计划&#xff0c;是一系列操作的集合&#xff0c;Jenkins 里的最常用的功能就是 job 的构建&#xff0c;即任务的构建。通过构建 job 即可让工人为你工作。 image806387 84.3 KB 创建 job及配置步聚 可以通过如下步…

C#,图像二值化(20)——全局阈值的耶恩算法(Yen Thresholding)及源代码

1 全局阈值的耶恩算法&#xff08;Yen Throsholding&#xff09;常见阈值算法1.1黄算法HuangThresholdImageFilter使用Shannon的熵函数实现Huang的模糊阈值[1]。模糊性度量表示原始图像与其二进制版本之间的差异。对于给定的阈值级别&#xff0c;像素的模糊隶属度函数由像素灰度…

Java中常用API总结(7)—— BigDecimal类

BigDecimal类一、前言二、概述1.API帮助文档2.使用方法三、常见方法1.格式2.实例3.报错4.解决方法四、结语一、前言 在使用float或者double类型的数据在进行数学运算的时候&#xff0c;很有可能会产生 精度丢失问题 我们都知道计算机底层在进行运算的时候&#xff0c;使用的都…

Echarts image 使用

通过image://...xx.png 在扇形图中可能会失败&#xff0c;可以将需要载入的img转换成base64直接载入可以通过背景色来载入图片 backgroundColor: {image: xxx/xxx.jpg },实例&#xff08;扇形图&#xff09;&#xff1a;var option {tooltip: {trigger: "item",show…

如何用用C++实现通达信接口调用?有哪些技巧

c作为三大计算机语言之一&#xff0c;在编程时很受投资者的偏爱&#xff0c;特别是在通达信接口软件开发时C更是担任着重要的开发角色&#xff0c;今天小编就来和大家说一下如何用C实现通达信接口调用&#xff1f; 用C查询股份数据代码&#xff08;部分&#xff09; std::cou…

C4D和Maya哪个学起来更容易

Maxon Cinema 4D和 Autodesk Maya 是最著名的两种 3D 软件&#xff0c;艺术家和工作室经常在许多领域使用它们。它们都有不同的功能&#xff0c;在本文中&#xff0c;让我们对它们进行比较。我们将尝试向您概述它们之间的主要区别&#xff0c;以及这两者的功能。哪一个更容易使…

2: [SpringData集成Elasticsearch] --- 配置打印命令日志

文章目录一&#xff1a;引入SpringDataElasticsearch依赖二&#xff1a;创建RestHighLevelClient配置类三&#xff1a;配置YML&#xff1a; logging.level --- 日志等级三&#xff1a;请求接口&#xff0c;查看日志3.1&#xff1a;请求代码3.2&#xff1a;Postman请求地址3.3&a…

LayoutInflater学习(一)之布局解析

LayoutInflater的创建与实例化 LayoutInflater是位于 "android.view" 包下的一个抽象类,同样它也是一个系统级服务 package android.view; SystemService(Context.LAYOUT_INFLATER_SERVICE) public abstract class LayoutInflater { LayoutInflater是用来解析 xml…

桌面录屏软件,分享3个十分便捷的录屏软件

​图片和视频都是人们传播信息的方式&#xff0c;不过相比于图片&#xff0c;视频能够更加直观生动的表达信息。在日常生活中&#xff0c;除了屏幕上记录一些应用程序的内容外&#xff0c;有时我们还需要记录电脑桌面。有更好的桌面录屏软件吗&#xff1f;当然&#xff0c;小编…

Git操作不规范,战友提刀来相见!

年终奖都没了&#xff0c;还要扣我绩效&#xff0c;门都没有&#xff0c;哈哈。 这波骚Git操作我也是第一次用&#xff0c;担心闪了腰&#xff0c;所以不仅做了备份&#xff0c;也做了笔记&#xff0c;分享给大家。 文末留言抽奖&#xff0c;聊聊你的年终奖。 问题描述 小A和…

C++多线程(并发、进程、线程的基本概念和综述)

并发、进程、线程的基本概念和综述 并发 并发表示两个或者更多任务(独立的活动)同时发生(进行)。例如&#xff0c;一面唱歌一面弹琴&#xff0c;一面走路一面说话&#xff0c;画画的时候听小说等。回归到计算机领域&#xff0c;所谓并发&#xff0c;就是一个程序同时执行多个…

html 3D立体多形态旋转音乐相册 | 2022都结束了,还不快给女神制作一个特殊的纪念相册

&#x1f4cb; 前言 &#x1f5b1; 博客主页&#xff1a;在下马农的碎碎念✍ 本文由在下马农原创&#xff0c;首发于CSDN&#x1f4c6; 首发时间&#xff1a;2023/01/07&#x1f4c5; 最近更新时间&#xff1a;2023/01/07&#x1f935; 此马非凡马&#xff0c;房星本是星。向前…

零基础掌握IP地址知识,小白必学知识点!

前言 大家好&#xff0c;在生活中我们使用具有上网功能的电子设备都有IP地址&#xff0c;就跟每个人都有自己的名字一样。IP地址分为IPV4 IPV6&#xff0c;我们所说的的IP地址指的是IPV4的地址。 正文 IPV4( Internet Protocol Version 4 )互联协议版本4&#xff0c;有版本V4之…

【HTML+CSS+JavaScript】动感爱心—— I love you~

有段时间没有分享了,no time。 还是抽出一会儿分享一下。有时间会解析的(具体…I don’t know)。 1. 效果展示 真实效果挺好看的,喜欢的朋友,可以给你的女朋友或者喜欢的TA看看呀! 可以根据实际情况修改文案,比如诗歌,或者你爱的人的名字哦~ 2. 源代码分享 2.1 动感…

在Ubuntu上安装docker(Ubuntu版本18.04)

在Ubuntu上安装docker详细步骤1、卸载之前的docker版本2、安装docker仓库3、在系统中添加Docker的官方密钥4、添加docker源5、再次更新源列表6、查看可以安装的docker版本并安装docker7、使用命令查看是否安装成功以及安装的docker版本8、启动 docker服务并设置开机自动启动doc…

FPGA基础之modelsim常见问题

目录 问题一&#xff1a;modelsim破解失败 1&#xff09;现象 2&#xff09;原因 ​ 3&#xff09; 解决 问题一&#xff1a;modelsim破解失败 1&#xff09;现象 modelsim激活失败&#xff0c;原先正常使用过的&#xff0c;重新卸载安装破解&#xff0c;设置环境变量…