Java数组详解

news2024/11/26 16:57:51

​@TOC

第一章、数组的概念介绍

1.1)数组的概念

①数组就是用来储存数据的容器,可以存储同一种类型的数据,是同一种数据类型的集合。实现对这些数据的统一管理。如果数组中存储的是基本类型数据,我就不能往里面存引用类型数据。数组中存储的是引用类型数据,我就不能往里面存基本类型数据。

②数组容器存储的可以是引用类型数据或者基础类型数据,但数组本身属于引用类型变量。

③数组是线性数据结构,有固定长度和大小的概念数组长度一旦确定了,就不可以改变

,我们称为:长度length。

④数组有索引的概念,数组中的元素从0开始编号,这个编号我们称为:下标index,因为是从0开始编号所以索引最大值为:length-1。

1.2)数组的初始化

以创建一个长度为5的int类型的数组举例

①动态初始化,初始化只确定元素个数,等需要时再添加元素

数组中保存的数据类型[] 数组的名字 = new 数组中保存的数据类型[存储的元素个数]

    int[]      arr  = new int[5];

②静态初始化2,初始化的时候就确定 里面的元素

数组中保存的数据类型[] 数组名字 = new 数组中保存的数据类型[]{元素1,元素2,元素3,元素4,元素5};

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

③静态初始化2,初始化的时候就确定 里面的元素

数组中保存的数据类型[] 数组名字 = {元素1,元素2,元素3,元素4,元素5};

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

​​

第二章、数组的使用

2.1)数组添加元素的方法/数组的赋值

在动态初始化后我们要单独为数组添加元素,也就是赋值操作。

①赋值操作,添加元素,设置元素值操作 ==> 数组名配合下标,注意:下标从零开始。

数组名[下标]=需要添加的元素;

arr [0] = 1 ;
arr [1] = 2 ;
arr [2] = 3 ;
arr [3] = 4 ;
arr [4] = 5 ;

2.2)数组的遍历

①当我们需要查看数组里面的内容。最基础的是使用for循环遍历的方法查看

        //遍历arr数组元素,打印元素内容看效果

        for(int i = 0;i <= arr.length - 1;i++){
            //数组名arr  配合下标i  获取元素值
            System.out.println(arr[i]);
        }

②使用do while循环遍历arr数组元素

//使用do while循环遍历arr数组元素,打印查看效果

		int j = 0;
		do{
			System.out.print(arr2[j] + " ");
			j++;
		}while(j <= arr2.length - 1);

2.3)数组排序

①数组之选择排序的升序

选择排序:从数组空间中选择第一个数据,和后面空间中的数据进行比较,比较完之后将最小的数据和当前的第一个空间中的数据进行互换位置。然后再选择第二个元素和除第一个空间中的数据进行比较,同样找出最小的数据,将两个空间中的数据的位置互换。后面的数据以此类推,一直到将所有的数据变成从小变大的数据为止

//定义arr数组
int[] arr = {11,22,33,44,55,66};

//外层循环控制轮数
for(int i = 0;i <= arr.length - 2;i++){

//内层循环控制每一轮执行的次数
		for(int j = i + 1;j <= arr.length - 1;j++){

			if(arr[i] > arr[j]){
				int temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;

				}
			}
		}

②数组之冒泡排序的升序

冒泡排序(Bubble Sort):通过对排序序列从前向后(从下标较小的元素开始)依次比较相邻元素的值,若发现逆序则交换,使得值比较大的元素逐渐从前向后移动,就像水底下的气泡一样逐渐向上冒。

//定义arr数组
int[] arr = {11,22,33,44,55,66};

//冒泡排序
for(int i = 0 ;i< arr.length -1; i++){
			for(int j = 0; j<arr.length-1-i; j++){
				if(arr[j]>arr[j+1]){
					temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
			
		}

2.4)数组的最小值

//定义arr数组
int[] arr = {11,22,33,44,55,66};

int min = arr[0];	//假设0索引位置的元素是最小的

		for(int i = 0;i <= arr.length - 1;i++){

			if(arr[i] < min){

				//说明当前元素的内容小于min的值,为min重新赋值
				min = arr[i];
			}
		}

2.5)数组的反转

①第一种反转

//定义arr数组
int[] arr = {11,22,33,44,55,66};

//反转
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;

②第二种反转

//定义arr数组
int[] arr = {11,22,33,44,55,66};

for(int i = 0,j = arr.length - 1;i < j;i++,j--){

		int temp = arr[i];

		arr[i] = arr[j];

		arr[j] = temp;
	}

③第三种反转

//定义arr数组
int[] arr = {11,22,33,44,55,66};

//创建新的int数组,长度和原数组保持一致
int[] newArr = new int[arr.length];
		//反向遍历arr数组元素,赋值操作
		int i = arr.length - 1;		//此处的i只能关联arr数组元素位置
		int j = 0;					//此处的j关联的是newArr数组元素位置
		while(i >= 0){
			newArr[j] = arr[i];
			i--;
			j++;
		}
	}

2.6)数组中常见的异常

①空指针异常

//运行时异常:	空指针异常java.lang.NullPointerException

//使用静态初始化创建数组
int[] arr2 = {11,22,33,44,55};

//使数组为null,里面不在有数据
arr2 = null;

//arr是null的情况下去使用他。null值无法进行调用的行为,
//一旦null值调用了类的成员(属性、方法),一定空指针!!!
				
System.out.println(arr2[0]);
System.out.println(arr2.length);

②越界异常

//运行时异常:	数组下标越界异常
//java.lang.ArrayIndexOutOfBoundsException: 1000
//java.lang.ArrayIndexOutOfBoundsException: -10
	
//先创建长度为10的数组	
int[] arr = new int[10];

//我把下标写成了1000,可是数组的长度并没有这么长,于是出现越界异常
System.out.println(arr[1000]);

//我把下标写成了-10,可是数组的长度不可能为负数,于是出现越界异常
System.out.println(arr[-10]);

第三章、二维数组

​​
本质上就是以数组作为数组元素的数组。

3.1)二维数组定义

①动态创建一个二维数组,包含五个一维数组,每个一维数组的长度尚未确定。

//创建二维数组
int[][] arr = new int[5][];

②动态创建一个二维数组,包含五个一维数组,每个一维数组里长度为5。

//创建二维数组对象
int[][] arr = new int[5][5];

③静态创建一个二维数组,包含3个一维数组,每个一维数组里长度为3,并且直接赋值。

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

3.2)二维数组的赋值

​​​​​
①直接赋值

//创建二维数组容器
int[][] arr = new int[3][3];

//直接赋值到
arr[1][0] = 20;
arr[1][1] = 20;

//打印输出
System.out.println("arr[0][0]=" + arr[0][0]);	
System.out.println("arr[1][0]=" + arr[1][0]);	
System.out.println("arr[1][1]=" + arr[1][1]);	

打印结果如图:未赋值的默认为0

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

②用for循环赋值

//创建二维数组对象
int[][] arr = new int[5][];

//外层循环控制行数 定位二维数组的每个元素空间	
		for(int i = 0;i <= arr.length - 1;i++){
			//创建一维数组容器,关联当前二维数组的元素位置
			arr[i] = new int[i + 1];

			//内层循环控制当前行的列数 --> 为当前一维数组的每个元素进行赋值操作
			for(int j = 0;j <= arr[i].length - 1;j++){

				//赋值操作
				arr[i][j] = i + 1;
				//打印展示操作
				System.out.print(arr[i][j]);
			}
			//单独换行
			System.out.println();
		}

打印结果如图:
​​​​​​在这里插入图片描述

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

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

相关文章

Java-Tomcat

一、web补充技术 ①&#xff1a;B/S架构 主流的方式&#xff0c;只要有浏览器即可。编程方式直接基于socket即可 ②&#xff1a;javascript 简称js&#xff0c;早期只是实现在客户端的浏览器的动态效果&#xff0c;但服务端不会解释运行&#xff0c;所以本质上是静态资源。 …

峥嵘九载,逐云而上:青果乔迁新址,乘风破浪再起新篇

4月1日&#xff0c;近百名员工和诸多合作伙伴齐聚&#xff0c;共同见证了青果九周年庆典暨乔迁仪式这一里程碑式的时刻。 新起点&#xff0c;新征程&#xff0c;再启航&#xff01; 以新为序&#xff0c;共赴新征程 在典礼上&#xff0c;青果创始人和高管分别发表了致辞&#…

python实现OCR:pytesseract和pyddleocr(附代码)

文章目录 背景pytesseractpaddleocr百度apipaddleocr 背景 OCR是光学字符识别&#xff08;Optical Character Recognition&#xff09;的缩写&#xff0c;通过扫描等光学输入方式和文字识别将图片中的文字提取出来&#xff0c;非常适用于提取网络截图或扫描pdf等文件里的文本。…

2014最新AI智能系统ChatGPT网站源码+Midjourney绘画网站源码+搭建部署教程文档

一、文章前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

关于OpenFeign的返回类型包装问题

在一天夜里。我在使用feign的调用时&#xff0c;突然出现了一点点问题。 就是对于feign类型的包装问题。产生了疑问。 在后来&#xff0c;也就是今天。在网上取取经。看到了一个答案。说&#xff1a;feign的调用会有一个编码器和解码器。 使用feign的解码器。他的原理也很简…

c++有趣代码(游戏)(续集)

19.忍者三(参考:c++高级游戏集游戏_c++游戏库-CSDN博客) #include<bits/stdc++.h> #include<windows.h> #include<stdio.h> #include<conio.h> #include<time.h> #define Nor if(B[b].x<5) B[b].x=5; #define Out1 Bx1-

【JavaEE框架技术】spring-1

目录 一、使用maven管理spring项目 1.1搭建开发环境 1.1.1修改settings.xml文件 1.1.2把该文件拷入.m2目录 1.1.3打开ecplise&#xff0c;建立maven项目 1.1.4向pom.xml文件中添加spring的坐标&#xff1a; 1.4.1.1代码含义 1.4.1.2代码说明 1.2创建spring配置文件 二…

7.1.4 Selenium 爬取京东商品信息实战

目录 1、实战内容 2、思路 3、分析 url 4、开始操作 1、得到 Cookies 2、访问页面&#xff0c;得到 response 3、解析页面 4、存入 MySQL 5、1-3步总代码 1、实战内容 爬取京东笔记本电脑商品的信息(如&#xff1a;价格、商品名、评论数量)&#xff0c;存入 MySQL 中…

RAG基础知识及应用

简单介绍下RAG的基础知识和RAG开源应用 “茴香豆" 一. RAG 基础知识 1. RAG工作原理 RAG是将向量数据库和大模型问答能力的有效结合&#xff0c;从而达到让大模型的知识能力增加的目的。首先将知识源存储在向量数据库中&#xff0c;当提出问题时&#xff0c;去向量数据库…

ENVI实战-影像的下载和矢量边界裁剪

实验1&#xff1a;学会使用不同的遥感数据检索和下载平台 目的&#xff1a;学会使用不同的数据平台&#xff0c;检索和下载所需的遥感数据。 过程&#xff1a; ①基于地理空间数据云的数据检索和下载方法&#xff1a; A.网站进入&#xff1a;网络搜索&#xff1a;https://w…

Notepad++软件安装及配置说明

Notepad是 Windows操作系统下的一套文本编辑器&#xff0c;有完整的中文化接口及支持多国语言编写的功能。 Notepad功能比 Windows自带记事本强大&#xff0c;除了可以用来制作一般的纯文字说明文件&#xff0c;也十分适合编写计算机程序代码。Notepad不但可以显示行号&#xf…

ABC库存分类管理法

ABC库存分类管理法&#xff1f; ABC分类法是根据物品在技术或经济方面的主要特征&#xff0c;进行分类排队&#xff0c;将分析对象划分成A、B、C三类&#xff0c;从而有区别地确定管理方式的分析方法。 ABC分类法来源与定义 1951年美国通用公司经理戴克将“关键的少数和次要的…

day76 jquery

知识点: 1 在HTML中引入jQuery 2 jQuery中就绪函数 3 jQuery中选择器 4 使用jQuery获取表单元素的值 及标签中间的内容 5 jQuery中获取标签属性 6 jQuery设置和获取标签样式 ----------------------------------- 一 在HTML中引入jQuery 1 1) 把jQue…

3.C++ Make

1.Makefile 1.1 什么是 Makefile 一个工程中有很多文件&#xff0c;文件之间都是相辅相成有着编译的先后顺序&#xff0c;但是如果自己手动根据编译顺序编译文件造成速度非常慢。Makefile 是”自动化编译“&#xff0c;只需一个 make 指令系统就会根据编译顺序帮自己编译文件…

excel散点图怎么每个点添加名称

最终效果图&#xff1a; 添加图标元素->数据标签->其他数据标签选项 选择单元格中的值 手动拖动数据标签&#xff0c;调整到合适的位置。

Spring学习笔记:IOC控制反转、AOP面向切面

挺快的&#xff0c;框架这一部分 文章目录 一、Spring概述入门案例导入依赖包在src下写配置文件创建普通类和测试类 二、IOC&#xff08;控制反转&#xff09;2.1 IOC bean 的XML操作&#xff08;创建对象&#xff0c;注入属性2.2 IOC bean 的 注解 操作 三、AOP&#xff08;面…

《UE5_C++多人TPS完整教程》学习笔记31 ——《P32 角色移动(Character Movement)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P32 角色移动&#xff08;Character Movement&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者&…

用国内版Devin:DevOpsGPT开发一个简易官网

前言&#xff1a; 世界上第一个AI程序员Devin想必已经给大家带来了不小的震撼&#xff0c;这种L4级的技术也许已经昭示着AGI离我们或许真的不远了。 这里先给大家普及一个概念&#xff1a; L4是谷歌对AGI划分的第四个等级&#xff0c;把代码丢给 AI 改这个是 L1 或者 L2 级别的…

CentOS7安装Docker及禅道

https://blog.csdn.net/weixin_46453070/article/details/136183615?ops_request_misc%257B%2522request%255Fid%2522%253A%2522171246925816800222886233%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id171246925816800222886233&biz_i…

基于RTThread的学习(三):正点原子潘多拉 QSPI 通信 W25Q128 实验

1、基于芯片创建工程 2、QSPI配置 2.1、RTThing_setting 设置组件 2.2、配置board.h 文件 2.3、cubemx生成QSPI的硬件初始化代码&#xff1b;HAL_QSPI_MapInit; 这里注意&#xff1a;你所买的开发板对应的qspi 连接的是否是cubemx 上边显示的&#xff0c;如果不是你需要将引脚…