Java奠基】数组的讲解与使用

news2024/12/25 9:21:00

目录

数组概述

数组的定义与初始化

数值遍历

数组的常见操作

数组内存图


数组概述

数组是一种容器,可以用来存储同种数据类型的多个值,数组容器在存储数据的时候,需要结合隐式转换考虑。例如:int类型的数组容器不能存放取值范围比它大的boolena和double,double类型的数组取值范围最大,可以存放所有类型的数组。注意:容器的类型,和存储的数据类型保持一致

数组的定义与初始化

Java中定义数组有两种方式,如下:

格式一:数据类型 [ ] 数组名

int [ ] array

格式二:数据类型 数组名 [ ]

int array[ ]

数组的初始化就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程,数组初始化有两种方式,如下:

数组的静态初始化:其使用方式如下:

完整格式:数据类型 [ ] 数组名 = new 数据类型[ ]{ 元素1,元素2,元素3 };

int [ ] array = new int[ ]{ 11,12,13 };

在开发过程中,我们一般会使用其简写形式,如下:

int [ ] array = { 11,12,13 };

public class Main {
    public static void main(String[] args) {
        // 存储年龄的数组
        int[] arr1 = new int[]{11,12,13};
        int[] arr2 = {14,15,16}; // 简写
        // 存储姓名的数组
        String[] arr3 = new String[]{"张三","李四","王五"};
        String[] arr4 = {"陈六","戴七","赵八"}; // 简写
        // 获取数组的元素值
        System.out.println(arr1[0]); // 11
        System.out.println(arr3[1]); // 李四
        System.out.println(arr4); // [Ljava.lang.String;@4eec7777 [表示地址值,后面数值表示地址值
    }
}

数组的动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。其使用方式如下:

格式:数据类型 [ ] 数据名 = new 数据类型[ 数据长度 ];

范例:int [ ] arr = new int[ 3 ];

public class Main {
    public static void main(String[] args) {
        // 创建动态初始化数组
        int[] arr = new int[10];
        arr[0] = 1;
        arr[1] = 2;
        System.out.println(arr[0]); // 1
        System.out.println(arr[1]); // 2
        System.out.println(arr[2]); // 0
    }
}

注意: 在数组动态初始化的时候有以下规律

整数类型:默认初始值为0

小数类型:默认初始值为0.0

字符类型:默认初始值 '/u0000' 空格

布尔类型:默认初始值为false

引用数据类型:默认初始值为null

数组静态初始化与动态初始化的区别

静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度。

动态初始化:手动指定数组长度,由系统给出默认初始值。

需求中已经明确了要操作的具体数据,直接静态初始化即可;只明确元素个数,不明确具体数值,推荐使用动态初始化。

数值遍历

数组遍历就是将数组中所有的内容取出来,进行相关的数组数据操作,如下:

public class Main {
    public static void main(String[] args) {
        // 存储年龄的数组
        int[] arr = {11,12,13,14,15,16,17,18};
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        // 存储年龄的数组
        int[] arr = {11,12,13,14,15,16,17,18};
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum+=arr[i];
        }
        System.out.println(sum); // 116
    }
}

数组的常见操作

接下来列举Java中操作数据最常见的案例:

求最值

public class Main {
    public static void main(String[] args) {
        // 定义数组并存储5个数值,找出最大值
        int[] arr = {12,14,16,67,85};
        // 临时认为0索引的数据是最大的
        int max = arr[0];
        // 循环遍历数组,将数组中的每个元素与max进行比较
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]>max){
                max = arr[i];
            }
        }
        // 循环结束,max记录的就是数组的最大元素
        System.out.println(max); // 85
    }
}

求和平均并统计个数

public class Main {
    public static void main(String[] args) {
        // 定义动态初始化数据,求和与平均
        int[] arr = new int[10];
        // 将随机数存入r当中
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            // 将每循环一次的随机数存储到变量number当中
            int number = r.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); // 求平均
        // 求比数组的平均数小的元素个数
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]<sum/arr.length){
                count++;
            }
        }
        System.out.println("比平均数小的元素个数:"+count);
    }
}

交换数据

public class Main {
    public static void main(String[] args) {
        // 定义数组存储数据
        int[] arr = {12,14,15,16,18};
        // 利用循环交换数组
        for (int i = 0,j = arr.length-1; i < j; 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]+ " "); // 18 16 15 14 12 
        }
    }
}

打乱数据

public class Main {
    public static void main(String[] args) {
        // 定义数组存储数据
        int[] arr = {12,14,15,16,18};
        Random r = new Random();
        // 循环遍历数组,从0索引开始打乱数据的顺序
        for (int i = 0; i < arr.length; i++) {
            // 生成一个取值范围为数组长度的随机索引
            int randomindex = r.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中内存分配主要有以下几种:

栈:方法运行时使用的内存,比如main方法运行,进入方法栈中执行。

堆:存储对象或者数组,new来创建的,都存储在堆内存。

方法区:存储可以运行的class文件。

本地方法栈:JVM在使用操作系统功能的时候使用,和我们开发无关。

寄存器:给CPU使用,和我们开发者无关。

注意:只要是new出来的一定是在堆里面开辟了一个小空间,如果是new了多次,那么在堆里面有多个小空间,每个小空间中都有各自的数据。

当两个数组指向同一个小空间时,其中一个数组对小空间中的值发生了改变,那么其他数组再次访问的时候都是修改之后的结果了。

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

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

相关文章

191、【动态规划】AcWing ——AcWing 900. 整数划分:完全背包解法+加减1解法(C++版本)

题目描述 参考文章&#xff1a;900. 整数划分 解题思路 因为本题中规定了数字从大到小&#xff0c;其实也就是不论是1 2 1 4&#xff0c;还是2 1 1 4&#xff0c;都会被看作是2 1 1 4这一种情况&#xff0c;因此本题是在遍历中不考虑结果顺序。 背包问题中只需考虑…

mysql一条语句的写入原理

mysql写入原理 我们知道在mysql数据库最核心的大脑就是执行引擎&#xff1b; 其中的默认引擎Innodb在可靠执行和性能中做出来平衡&#xff1b; innodb支持在事务控制、读写效率&#xff0c;多用户并发&#xff0c;索引搜索方面都表现不俗&#xff1b; innodb如何进行数据写入…

MYSQL性能分析,Explain,Show Profile

文章目录一、MYSQL常见瓶颈二、ExplainExplain是什么三、Show Profile四、慢查询日志和全局查询日志一、MYSQL常见瓶颈 CPU&#xff1a; CPU饱和IO&#xff1a;磁盘IO速度过慢。服务器的硬件性能瓶颈。 二、Explain Explain是什么 使用explain关键字可以模拟优化器执行sql查…

YApi分析从NoSQL注入到RCE远程命令执行.md

0x00 前提 这个是前几个月的漏洞&#xff0c;之前爆出来发现没人分析就看了一下&#xff0c;也写了一片 Nosql注入的文章&#xff0c;最近生病在家&#xff0c;把这个写一半的完善一下发出来吧。 0x01 介绍 YApi是一个可本地部署的、打通前后端及QA的、可视化的接口管理平台…

【C++】命名空间

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;C的学习之路 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、命名空间产生的背景二、命名空…

【一天时间|简历模板】世界上最好的前端简历

一天时间系列文章是博主精心整理的面试热点问题和难点问题&#xff0c;吸收了大量的技术博客与面试文章&#xff0c;总结多年的面试经历&#xff0c;带你快速并高效地审视前端面试知识。直击技术痛点&#xff0c;主动出击&#xff0c;精密打击&#xff0c;这才是面试拿到高薪的…

网络基础知识(IP地址、TCP协议/IP协议、UDP协议、三次握手,四次挥手的过程、端口等的概念)

TCP/IP 协议 首先给大家说明的是&#xff0c;TCP/IP 协议它其实是一个协议族&#xff0c;包含了众多的协议&#xff0c;譬如应用层协议 HTTP、FTP、MQTT…以及传输层协议 TCP、UDP 等这些都属于 TCP/IP 协议。 所以&#xff0c;我们一般说 TCP/IP 协议&#xff0c;它不是指某…

unity-与js交互

title: unity-与js交互 categories: Unity3d tags: [unity, js, web, h5] date: 2023-03-05 00:09:52 comments: false mathjax: true toc: true unity-与js交互 前篇 官方 WebGL&#xff1a;与浏览器脚本交互 - https://docs.unity3d.com/cn/2021.1/Manual/webgl-interacting…

JavaWeb--JSP

JSP1 JSP 概述2 JSP 快速入门2.1 搭建环境2.2 导入 JSP 依赖2.3 创建 jsp 页面2.4 编写代码2.5 测试3 JSP 原理4 JSP 脚本4.1 JSP 脚本分类4.2 案例4.2.1 需求4.2.2 实现4.2.3 成品代码4.2.4 测试4.3 JSP 缺点5 EL 表达式5.1 概述5.2 代码演示5.3 域对象6 JSTL标签6.1 概述6.2 …

Android应用启动优化笔记整理

应用启动相关流程与优化 应用启动主要涉及SystemServer进程 和 app进程。 SystemServer进程负责app进程创建和管理、窗口的创建和管理&#xff08;StartingWindow 和 AppWindow&#xff09;、应用的启动流程调度等。 App进程被创建后&#xff0c;进行一系列进程初始化、组件初…

【LinkedList】| 深度剥析Java SE 源码合集Ⅰ

目录一. &#x1f981; LinkedList介绍二. &#x1f981; 结构以及对应方法分析2.1 结构组成2.1.1 节点类2.1.2 成员变量2.2 方法实现2.2.1 添加add(E e)方法2.2.2 头尾添加元素Ⅰ addFirst(E e)Ⅱ addLast(E e)2.2.3 查找get(int index)方法2.2.4 删除remove()方法三. &#x…

【云原生】整合K8s + SpringCloudK8s + gRpc + RocketMQ + Istio + Envoy

背景本文把前面的代码整理一遍&#xff0c;不仅仅是demo层面&#xff0c;而是考虑到放进生产中使用&#xff0c;且尽可能用高版本&#xff0c;关于这块技术&#xff0c;网上的文章真是一言难尽&#xff0c;要么就是个概念&#xff0c;要么就是把官网的demo拿过来跑一遍&#xf…

图神经网络 pytorch GCN torch_geometric KarateClub 数据集

图神经网络 安装Pyg 首先安装torch_geometric需要安装pytorch然后查看一下自己电脑Pytorch的版本 import torch print(torch.__version__) #1.12.0cu113然后进入官网文档网站 链接: https://pytorch-geometric.readthedocs.io/en/latest/install/installation.html 安装自己…

【小破站下载工具】Python tkinter 实现网站下载工具,所有数据一键获取

目录前言开发环境本次项目案例步骤先展示下完成品的效果界面导入模块先创建个窗口功能按键主要功能代码编写功能一功能二功能三前言 最近很多同学想问我&#xff0c;怎么把几个代码的功能集合到一起&#xff1f; 很简单&#xff0c;写一个界面就行了&#xff0c;想要哪个代码…

黑马程序员7

算数运算符重载 运算符重载概念&#xff1a;对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型 加号运算符 通过自己写函数&#xff0c;实现两个对象相加属性后返回新的对象 两种方式重载 成员函数方式重载 全局函数重载 上来 perso…

Go 内存分布

Go内存分布方式在C中&#xff0c;每个值在内存中只占据一个内存块&#xff08;一段连续内存&#xff09;&#xff1b;但是&#xff0c;一些Go类型的值可能占据多个内存块。以后&#xff0c;我们称一个Go值分布在不同内存块上的部分为此值的各个值部&#xff08;value part&…

网络安全平台测试赛 easyphp(phar脏数据处理)

昨天的比赛&#xff0c;14.00-17.00.时间有点紧张&#xff0c;比赛期间没拿下来这道 &#x1f62d;非常痛苦&#xff0c;很顺畅的思路 一步步想下来&#xff0c;卡在最后一步末尾脏数据处理了&#xff0c;最后时间到了 没打通&#xff0c;还需多练 这里本地复现一下&#xff1…

linux 进程及调度基础知识

引用Linux进程管理专题Linux进程管理与调度-之-目录导航Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度&#xff08;五&#xff09;蜗窝科技-进程管理郭健&#xff1a; Linux进程调度技术的前世今生之“前世”郭健&#xff1a; Linux进程调度技术…

1.7 古典概型问题类型一——随机取数问题

(1)我的答案&#xff1a;一、信息首先7个数字全不相同二、分析七个数字全不相同意味着每次取出来的数都不一样&#xff0c;然后每次取出后选择少一种&#xff0c;为简单排列不含10和1这意味从8个数里面选且可以重复为重复排列3.10恰好出现两次隐含着两个问题&#xff0c;第一&a…

备考考研2数学

进度说明&#xff0c;开始形成自己的复习进度说明&#xff01; 14:21 2023年2月28日星期二 武忠祥数学 截止目前&#xff0c;看完了01.高数基础01 14:21 2023年2月28日星期二 开始看02. 现在15:04 2023年2月28日星期二&#xff0c; 因为这2天的百度网盘不能进行解析了&…