java基础讲义05-数组

news2024/11/26 10:40:22

数组学习

  • 一 一维数组
    • 1.1 数组介绍
    • 1.2 多个变量和数组对比
    • 1.3 数组的定义和初始化
      • 1.3.1 数组定义
      • 1.3.2 数组初始化
    • 1.4 数组访问
  • 二 数组内存结构
    • 2.1 JVM内存介绍
      • 2.1.1一个数组对象的内存图
      • 2.1.2常见异常处理
  • 三 数组常见操作
  • 四 二维数组
    • 4.1 二位数组介绍
    • 4.2 二维数组定义和初始化
    • 4.3 二维数组内存图
    • 作业

一 一维数组

1.1 数组介绍

       数组是引用数据类型,可以看做是一个容器,存储着多个相同类型变量。
       数组中存储的每个数据被称为元素,每个元素可以看做是当前数组中一个个变量,变量类型取决于数组定义类型。
       数组中存储数据类型可以是基本类型也可以是引用类型。

1.2 多个变量和数组对比

       定义多个变量

int a = 11;
int b = 12;
int c = 13;
int d = 14;
int e = 15;

       数组

int[] arr = {11,12,13,14,15};

在这里插入图片描述

1.3 数组的定义和初始化

1.3.1 数组定义

       数组定义格式

数据类型[] 数组名;int[] arr; //常用
数据类型 数组名[];int arr[]; //不常用

1.3.2 数组初始化

       初始化介绍
        java中数组未初始化不能使用
       初始化分类: 动态初始化、静态初始化
        动态初始化介绍:先初始化数组对象,指定数组的大小。之后指定数组中要存储的数据元素。
        初始化格式

数据类型[] 数组名 = new 数据类型[数组长度];

        示例:定义一个数组,指定数组长度

int[] array = new int[3];
array[0] = 11;
array[1] = 12;
array[2] = 13;

      静态初始化介绍:初始化数组对象同时初始化数组中要存储的元素。
       初始化格式一

数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,元素4};

      初始化格式二

数据类型[] 数组名 = {元素1,元素2,元素3,元素4};

       示例

int[] array = new int[]{10,20,30,40,50};
int[] array1 = {11,21,31,41,51}

1.4 数组访问

     索引介绍
    数组中有一个索引或叫角标、下标,数组创建以后会每一个元素进行自动编号从0开始。
    获取数组中元素

数组名[索引];
int[] array = new int[]{10,20};
System.out.println(array[0]);
int value = array[0];

    为数组中元素赋值

数组名字[索引] =;
array[0] = 80;

    数组中的长度
    数组中一个属性为length,返回当前数组的长度。
    示例

int[] array = new int[]{10,20};
System.out.println("数组的长度是:"+array.length);

二 数组内存结构

2.1 JVM内存介绍

    JVM在执行java程序过程中会将整个内存划分为多个不同的数据区域,每个区域都有自己的用途及特定数据处理方式和内存管理方式,从而更加高效利用内存。
在这里插入图片描述
各内存区域的用途
程序计数器(Program Counter Register)
    与CPU相关,如字节码执行行号指示器。
虚拟机栈(VM Stack)
    执行方法时会先去虚拟机栈区域申请栈空间,称为压栈或入栈,方法运行结束释放内存空间,称为弹栈或出栈。
本地方法栈(Native Method Stack)
    本地方法栈和虚拟机栈一样,但是本地方法栈针对的是本地方法,C/C++编写的方法。
方法区(Method Area)
    方法区存放着Class字节码、常量池、静态修饰的内容等。
堆(Heap)
    堆在整个jvm内存中占用空间最大,对象都是存在堆内存中,比如new创建对象。堆内存中对象使用完成就变成了的垃圾由垃圾收集器回收释放内存空间。
1.程序计数器、虚拟机栈、本地方法栈是线程私有的。不需要实现垃圾收集,因为线程结束,内存
随之释放。
2.方法区、堆是线程共享的。是垃圾收集器主要收集的两个区域,程序运行过程中产生的垃圾对象
或废弃常量及废弃类等都会被垃圾收集器进行自动回收。
注意
    1.程序计数器、虚拟机栈、本地方法栈是线程私有的。不需要实现垃圾收集,因为线程结束,内存
随之释放。
    2.方法区、堆是线程共享的。是垃圾收集器主要收集的两个区域,程序运行过程中产生的垃圾对象
或废弃常量及废弃类等都会被垃圾收集器进行自动回收。

2.1.1一个数组对象的内存图

代码

public class ArrayDemo01 {
public static void main(String[] args) {
	int[] array = new int[3];
	System.out.println(array);
	System.out.println(array[0]);
	System.out.println(array[1]);
	System.out.println(array[2]);
	System.out.println(array);
	//出栈
	//两个数组对象运行时内存图
	//代码
	array[0] = 10;
	array[1] = 11;
	array[2] = 12;
	System.out.println(array[0]);
	System.out.println(array[1]);
	System.out.println(array[2]);
	}
}

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

2.1.2常见异常处理

角标越界异常(ArrayIndexOutOfBoundsException)
    因为数组角标是从0开始,不是从1开始。
案例演示:

int[] array = new int[5];
System.out.println(array[5]);//已经发生越界

解决方案:
    数组属性 array.length获取数组长度;
    数组长度减一就是数组的最大角标。
空指针异常(NullPointerException)
    数组必须先初始化才能使用,只是声明数组变量无法使用。
案例演示:

int[] array;int[] array = null;
System.out.println(array[0]);

解决方案:

//先判断数组变量是不是为null;
if(array != null ){
System.out.println(array[0]);
}

三 数组常见操作

数组元素遍历(for循环和while循环遍历数组)

	//for循环遍历数组:
	int[] array = new int[]{18,20,11,32};
	for(int i=0; i <= array.length-1; i++){
	System.out.println(array[i]);
	}
	//while循环遍历数组:
	int[] array = new int[]{18,20,11,32};
	int i = 0;
	while(i <= array.length-1){
	System.out.println(array[i]);
	i++;
	}

数组打印效果:[100 , 200 , 300 , 400 , 500]
封装代码如下:

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

获取数组中的最大值和最小值

public static void min(int[] array) {
	//先获得数组中的第一个值,依次和数组中的每一个值进行比较
	int min = array[0];
	for(int i=1; i <= array.length-1;i++) {
		if(array[i] < min) {
		min = array[i];
		}
	}
	System.out.println(min);
}

数组元素反转操作(数组中的元素对调)
在这里插入图片描述
代码实现:

int[] array = {200,300,400,500,600,700};
inversion(array);

方式一:

public static void inversion(int[] array) {
	for(int start=0,end=array.length-1; start <= end; start++,end--) {
		int temp = array[start];
		array[start] = array[end];
		array[end] = temp;
	}
}

方式二:

public static void inversion(int[] array) {
	for(int x=0; x<array.length/2; x++) {
		int temp = array[x];
		array[x] = array[array.length-1-x];
		array[array.length-1-x] = temp;
	}
}

数组元素查找(提供当月数值,判断属于哪个季度)

public static String season(int num) {
	String[] seasonArray = {"春季","夏季","秋季","冬季"};
	if(num >= 1 & num <= 3) {
		return seasonArray[0];
	}else if(num >= 4 & num <= 6) {
		return seasonArray[1];
	}else if(num >= 7 & num <= 9) {
		return seasonArray[2];
	}else if(num >= 9 & num <= 12) {
		return seasonArray[3];
	}
	return null;
}

四 二维数组

4.1 二位数组介绍

    二维数组可以理解为数组中还有数组
需求:有多个班级,每个班级有多个学生
         一维数组存储每个班级的学生
         二维数组存储每个班级

4.2 二维数组定义和初始化

格式一

数据类型[][] 变量名 = new 数据类型[m][n];
[m]中m表示二维数组中一维数组的数量
[n]中n表示每一个一维数组的元素个数
举例:
int[][] arr = new int[3][2];
定义了一个二维数组名字为arr
arr二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]
每个一维数组有2个元素,可以通过arr[m][n]来获取
表示获取第m+1个一维数组的第n+1个元素

格式二

格式2
数据类型[][] 变量名 = new 数据类型[m][];
[m]中m表示二维数组中一维数组的数量
[]中为空,二维数组中每个一维数组中元素个数动态指定
举例:
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];

格式三

格式3
数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
简化版格式:
数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
举例:
int[][] arr = {{1,2,3},{4,6},{6}};

二维数组元素获取

	int[][] array = new int[][] {{10,80,56},{90,11,82},{20,21,61}};
	//输出第一个一维数组元素
	System.out.println(array[0][0]);
	System.out.println(array[0][1]);
	System.out.println(array[0][2]);
	//输出第二个一维数组元素
	System.out.println(array[1][0]);
	System.out.println(array[1][1]);
	System.out.println(array[1][2]);
	//输出第三个一维数组元素
	System.out.println(array[2][0]);
	System.out.println(array[2][1]);
	System.out.println(array[2][2]);

二维数组遍历封装

public static void print(int[][] array) {
	for(int i=0;i<array.length;i++) {
		for(int j=0;j<array[i].length;j++) {
			if(j != array[i].length-1) {
				System.out.print(array[i][j]+",");
			}else {
				System.out.print(array[i][j]);
			}
		}
		//换行操作
		System.out.println();
	}
}

4.3 二维数组内存图

在这里插入图片描述
二维数组练习

/*
需求:公司年销售额求和
某公司按照季度和月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
*/
	// 定义二维数组
int[][] arr = {{22,66,44} , {77,33,88} , {25,45,65} , {11,66,99}} ;
	// 定义一个累加变量
	int sum = 0 ;
	// 遍历数组
	for(int x = 0 ; x < arr.length ; x++){
		for(int y = 0 ; y < arr[x].length ; y++){
			sum += arr[x][y] ;
		}
	}
// 输出
	System.out.println("sum: " + sum) ;
}

练手题:
二维数组案例1:共有六个学生,将每个学生对应学生的语文、数学、英语成绩求和求平均值

作业

1.说说对数组的理解?
2.数组定义方式?
3.数组的初始化方式有几种?请写出详细案例
4.数组中角标有什么作用?
5.数组中如何避免角标越界?
6.数组中如何避免空指针异常?
7.JVM内存结构,分别有什么作用?
8.请写出一个简单的数组在内存中执行过程?
9.请画出数组内存图
10.请写出数组反转的实现多种方式,并说明思路
11.请写出一个代码对数组中的元素进行去重。
12.什么是二维数组?二维数组有什么作用?
13.二维数组的初始化方式有哪几种?
14.二维数组的中的内容如何输出?
15.二维数组的内存图?请写出执行步骤
16.自己找一个二维数组的应用场景,并写出代码实现。

微信公众号也会持续更新…
大家可以一起学习😊
.
在这里插入图片描述

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

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

相关文章

C语言---指针初阶---总结

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​ &#x1f4e3;系列专栏&#xff1a;鹏哥带我学c带我飞 &#x1f4ac;总结&#xff1a;希望你看…

工业4.0 资产管理壳学习笔记( 6)-管理壳细节

本文是“资产管理壳细节 Part1的读书笔记。 <Details_of_the_Asset_Administration_Shell_Part1_V3.pdf> 要真正了解工业4.0 的管理壳&#xff0c;绕不开认真地读这篇文章。老实说&#xff0c; 第一次读这个文本会发现什么都明白&#xff0c;就是不知道有什么用场。其实学…

三种大数据应用架构介绍

信息技术的发展&#xff0c;如今数据存储能力上升到了 TB、PB 级别&#xff0c;企业和政府部门都以各种形式存储了大量的数据&#xff0c;如何快速有效地处理规模大、结构复杂的数据&#xff1f;本文主要介绍大数据的三类应用架构MapReduce、Hadoop、Spark&#xff0c;进行数据…

项目:德波量化(DealBot)

概述 德波量化&#xff08;DEALBOT&#xff09;项目研发始于2015年&#xff0c;初衷是建立一个可以自己编写交易策略&#xff0c;又可以自动化交易的小软件。为了这个目的&#xff0c;广泛搜寻了现有的开源量化交易软件&#xff0c;包括国外的Backtrader、zipline、Pysystemtr…

SSM整合01:

1.1原始方式整合 11.编写相应配置文件 Spring配置文件&#xff1a;applicationContext..xml SprngMVCi配置文件&#xff1a;spring-mvc.xml MyBatis映射文件&#xff1a;AccountMapper..xml .MyBatis核心文件&#xff1a;sqlMapConfig.xml 数据库连接信息文件&#xff1a;idbc.…

[C++数据结构](34)B树

文章目录B 树概念与性质B 树基本操作与实现框架查找插入遍历B 树性能分析及其优势B 树概念与性质 1970 年&#xff0c;R.Bayer 和 E.mccreight 提出了一种适用于外查找的树&#xff0c;它是一种平衡的多叉树&#xff0c;称为 B 树&#xff08;或 B-树、B_树&#xff09;。 一…

数字先锋 | 主机、硬盘、CPU统统没有? 这个电教室有点“潮”!

百年大计&#xff0c;教育为本。在数字中国建设整体布局和推进下&#xff0c;教育新基建为教育高质量发展构筑了数字底座&#xff0c;更为教育创新变革提供了强大的技术基础和应用环境。近年来&#xff0c;教育部门紧抓新一代信息技术发展机遇&#xff0c;赋能学校高质量发展&a…

使用YOLOV5训练口罩检测模型

一、YOLOV5源码和口罩数据集的下载与导入 我是在github上下载的&#xff0c;地址是GitHub - ultralytics/yolov5 at v7.0&#xff0c;下载之后&#xff0c;我将其导入pycharm环境中&#xff0c; 数据集在roboflow上面下载的&#xff0c;地址是Computer Vision Datasets&#…

Linux基础-压缩与打包

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【参考文章】 参考文章&#xff1a;https://howard2005.blog.csdn.net/article/details/127129580 文章目录一、压缩与打包1.1 压缩1.2 打包1.3 压缩或打包文件常见拓展名二、gzip命令2.1 命令作用2.2 选项参数2.3 实…

python中pandas进行数据分析与可视化(1)

1.创建数据源 matplotlib库是用于数据可视化&#xff0c;pandas则是用于数据分析&#xff0c;在导入这两个包之后&#xff0c;我们可以手工创建两个数据&#xff0c;其表示的是在某一年里&#xff0c;不同名称的新生儿数量&#xff0c;比如被叫做Bob的新生儿有968位 import m…

基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

动态规划之01背包问题

背包练习网址https://www.luogu.com.cn/contest/92872 想要做题的话可以到这里面来进行完成&#xff08;邀请码&#xff1a;r36l&#xff09;。注&#xff1a;要输入邀请码才可以进入。 满篇都是干货&#xff0c;有详细的注释和代码&#xff0c;请放心观看。 这就是传说中的 0…

[附源码]Python计算机毕业设计二手交易平台管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

数据生态第四弹 | OpenMLDB Hive Connector,架构起数据仓库到特征工程的生态桥梁

导读 近日&#xff0c;OpenMLDB 实现了与开源数据仓库软件 Hive 的连接&#xff0c;继完成与 Kafka、Pulsar、RocketMQ 等实时数据源生态整合后&#xff0c;持续构建离线数据生态&#xff0c;期待建设一个更加全面一体的上下游生态圈&#xff0c;在吸引更多用户的同时也能降低…

【能效管理】AcrelEMS-UT综合管廊能效管理平台解决方案应用分析

平台概述 AcrelEMS-UT综合管廊能效管理平台集电力监控、能源管理、电气安全、照明控制、环境监测于一体&#xff0c;为建立可靠、安全、高效的综合管廊管理体系提供数据支持&#xff0c;从数据采集、通信网络、系统架构、联动控制和综合数据服务等方面的设计&#xff0c;解决了…

DC-4靶场教程

探测目标靶机&#xff0c;获取到ip arp-scan -l扫描开放的端口 masscan -p1-65535 192.168.250.213 --rate10000使用nmap获取端口、服务版本、系统等详细信息 nmap -sC -sV -p- -A -T4 192.168.250.213查看使用的中间件 whatweb http://192.168.250.213/访问80端口 没有其…

NLP 模型“解语如神”的诀窍:在文本分类模型中注入外部词典

一. 引言 现实世界的文本表述如恒河沙数&#xff0c;以惊人的速度变换着&#xff0c;人工智能&#xff08;AI&#xff09;在快速识别形形色色的文本之前&#xff0c;必须经过充足的训练数据洗礼。然而&#xff0c;面对复杂多变的文本表述&#xff0c;NLP 模型往往无法从有限的…

架构设计(一):从单服务器模式到负载均衡设计

架构设计&#xff08;一&#xff09;&#xff1a;从单服务器模式到负载均衡设计 作者&#xff1a;Grey 原文地址&#xff1a; 博客园&#xff1a;架构设计&#xff08;一&#xff09;&#xff1a;从单服务器模式到负载均衡设计 CSDN&#xff1a;架构设计&#xff08;一&…

latex设置citation显示作者+年份

如果是bib文件分开放&#xff0c;并且每个引用都明确写了author和year&#xff0c;那么直接\citep 就可以&#xff0c;就能产生(abc et al., 2015) 这种格式, 如果你不想要圆括号&#xff0c;可以使用\usepackage[square]{natbib}, 也可以使用\setcitestyle{authoryear,open{(}…

java计算机毕业设计基于安卓Android的论坛App

项目介绍 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设…