Java数组详解

​@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.hqwc.cn/news/601589.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FutureMatrix S5735S-L48T4X-A1交换机配置SSH登录

目录 1. FutureMatrix 交换机1.1 查看版本1.2 配置前1.3 配置VTY用户界面的支持协议类型、认证方式和用户级别。1.4 开启STelnet服务器功能。1.5 配置SSH用户认证方式为Password1.6 配置后 1. FutureMatrix 交换机 1.1 查看版本 <SW3>display version FutureMatrix …

10分钟上手:MySQL8的Json格式字段使用总结干货

一、关于效率和适用范围 尽管官方承诺Json格式字段采用了空间换时间的策略&#xff0c;比Text类型来存储Json有大幅度的效率提升。但是Json格式的处理过程仍然效率不及传统关系表&#xff0c;所以什么时候用Json格式字段尤为重要。 只有我们确定系统已经能精确定位到某一行&am…

【完全背包求方案数问题】AcWing1023.买书(赋练习题目)

【题目链接】活动 - AcWing 输入样例1&#xff1a; 20输出样例1&#xff1a; 2输入样例2&#xff1a; 15输出样例2&#xff1a; 0输入样例3&#xff1a; 0输出样例3&#xff1a; 1 【代码】 //1023.买书——完全背包问题#include<bits/stdc.h>using namespace st…

一起学习HarmonyOS应用开发——基础篇(4)

前言&#xff0c;上一篇说了应用工程的目录结构&#xff0c;今天不讲ArkTS语言&#xff08;HarmonyOS优先的主力应用开发语言&#xff09;的语法&#xff0c;先说一下组件的事情。比如基础组件、容器组件、媒体组件、绘制组件、画布组件。今天就简单的学习一下常用的组件怎么玩…

【SpringCloud】Nacos 配置管理

目 录 一.统一配置管理1. 在 nacos 中添加配置文件2. 从微服务拉取配置 二.配置热更新1. 方式一2. 方式二 三.配置共享1. 添加一个环境共享配置2. 在 user-service 中读取共享配置3. 运行两个 UserApplication&#xff0c;使用不同的 profile4. 配置共享的优先级5. 多服务共享配…

提高网站安全性,漏洞扫描能带来什么帮助

随着互联网的蓬勃发展&#xff0c;网站已经成为人们获取信息、交流思想、开展业务的重要平台。然而&#xff0c;与之伴随的是日益严重的网络安全问题&#xff0c;包括恶意攻击、数据泄露、隐私侵犯等。 为了保障网站的安全性&#xff0c;提前做好网站的安全检测非常有必要&…

C语言程序与设计——工程项目开发

之前我们已经了解了C语言的基础知识部分&#xff0c;掌握这些之后&#xff0c;基本就可以开发一些小程序了。在开发时&#xff0c;就会出现合作的情况&#xff0c;C语言是如何协作开发的呢&#xff0c;将在这一篇文章进行演示。 工程项目开发 在开发过程中&#xff0c;你接到…

K8s学习十(高级调度)

高级调度 CronJob计划任务 在 k8s 中周期性运行计划任务&#xff0c;与 linux 中的 crontab 相同注意点&#xff1a;CronJob 执行的时间是 controller-manager 的时间&#xff0c;所以一定要确保 controller-manager 时间是准确的cron表达式如下&#xff1a; 配置如下&#x…

为什么企业推广需要品牌故事?媒介盒子分享

从时代来看&#xff0c;我们正处“信息超载的商业时代”&#xff0c;品牌传播面临着“产品同质化”和“信息超载化”的困境。近日小米SU7的出圈除了汽车本身的话题度外&#xff0c;离不开小米的品牌故事、创始人雷军的话题等等。今天媒介盒子就来和大家聊聊&#xff1a;为什么企…

医院智慧手术麻醉系统管理源码 C# .net有演示

医院智慧手术麻醉系统管理源码 C# .net有演示 手术麻醉管理系统(DORIS)是应用于医院手术室、麻醉科室的计算机软件系统。该系统针对整个围术期&#xff0c;对病人进行全程跟踪与信息管理&#xff0c;自动集成病人HIS、LIS、RIS、PACS信息&#xff0c;采集监护等设备数据&#x…

LowCodeEngine基础教程

一、技术介绍 1、应用场景 LowCodeEngine支持一下四种通用场景&#xff1a;中后台页面、移动端页面、流程、可视化报表。 2、低代码的特点 3、低代码在阿里巴巴实践 4、开发痛点 中后台页面中&#xff0c;对于页面的视觉冲击、视觉炫酷要求并不是很敏感&#xff0c;更多的是…

Java | Leetcode Java题解之第13题罗马数字转整数

题目&#xff1a; 题解&#xff1a; class Solution {Map<Character, Integer> symbolValues new HashMap<Character, Integer>() {{put(I, 1);put(V, 5);put(X, 10);put(L, 50);put(C, 100);put(D, 500);put(M, 1000);}};public int romanToInt(String s) {int …