JAVA-编程基础-06-数组

news2024/10/7 11:29:05

Lison <dreamlison@163.com>, v1.0.0, 2023.03.22

JAVA-编程基础-06-数组

什么是数组

​ 数组是一种线性数据结构,是一个使用连续的内存空间存放相同的数据类型的集合容器,与其他容器相比,数组的区别主要在于性能与保存基本类型的能力。

​ 在Java中,数组是一种效率最高的存储和随机访问对象的方式,通过寻址公式,随机访问的时间复杂可以达到O(1),但是为了保持空间的连续性,在数组中插入、删除数据时,都需要移动后面数据,该操作的时间复杂度为O(n)。另外,由于空间上连续,所以数组对CPU缓存比较友好,借助CPU的缓存机制,预读数组中的数据,提高访问效率。但是,由于数组是定长的,一旦声明之后就不可以改变长度,所以如果长度声明过大或者过小都会造成问题。

​ 数组可以自动给数组中的元素从0开始编号,方便操作这些元素。数组属于引用变量,并且数组的长度是固定的,数组的使用有四个步骤,声明数组,分配空间,赋值,处理。

一维数组的声明与创建

元素类型[] 数组名 = new 元素类型[元素个数或数组长度];

元素类型[] 数组名 = new 元素类型[]{元素,元素,……};

元素类型[] 数组名 = {元素,元素,……};

示例:int[] arr = new int[5];

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

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

注意:给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小。创建数组之后不能修改数组的大小。可以使用length 属性获取数组的大小。

数组的初始化

int[] arr = new int[5];//创建数组第一种方式,此时默认值都是为0
arr[0] = 1;//数组的初始化
arr[1] = 2;//数组的初始化
 
int[] arr = new int[]{3,5,1,7};//第二种方式:创建并初始化数组
 
int[] arr = {3,5,1,7};//第三种方式:创建并初始化数组
 
int[] arr;
arr = {1,2,3,4,5};//这种方式是错误的

数组的常见异常

ArrayIndexOutOfBoundsException 索引值越界。

原因:访问了不存在的索引值:

public static void main(String[] args) {
 
    int[] x = { 1, 2, 3 };
    System.out.println(x[3]);//数组角标从0开始
}

NullPointerException 空指针异常:

原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。

public static void main(String[] args) {
    
    int[] x = { 1, 2, 3 };
    x = null;
    System.out.println(x[1]);
}

在这里插入图片描述

数组内存分析

在这里插入图片描述

Arrays的使用

给数组赋值:通过 fill 方法。

比较数组:通过 equals 方法比较数组中元素值是否相等。

排序: sort() 将数组按照升序排列

查找: binarySearch()在指定数组中查找指定元素,返回元素的索引,如果没有找到返回(-插入点-1) 注意:使用查找的功能的时候,数组一定要先排序。

序号方法和说明
binarySearchpublic static int binarySearch(Object[] a, Object key) 用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。
equalspublic static boolean equals(long[] a, long[] a2) 如果两个指定的 long 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
fillpublic static void fill(int[] a, int val) 将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
sortpublic static void sort(Object[] a) 对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
public static void main(String[] args) {
	int[] array = new int[]{10,30,50,40,60};
	System.out.println(Arrays.toString(array));
		
	Arrays.sort(array);
	System.out.println(Arrays.toString(array));
		
	System.out.println("最小值:"+array[0]+";最大值:"+array[array.length-1]);
		
	int result = Arrays.binarySearch(array, 40);
	System.out.println("目标值的角标:"+result);
}

二维数组

二维数组定义:数组类型[][] 数组名 = new 数组类型[一维数组的个数] [每一个一维数组中元素的个数];

public static void main(String[] args) {	
		int[][] a = new int[3][4];
		System.out.println(a);//[[I@15db9742
		System.out.println(a.length);//获取二维数组中存储的一维数组的个数3
		System.out.println(a[0]);//获取的是二维数组中第一个一维数组:[I@6d06d69c
		System.out.println(a[0].length);//第一个一维数组的长度:4
		System.out.println(Arrays.toString(a[0]));//默认值都是0:[0, 0, 0, 0]	
}

二维数组的初始化

//静态初始化:
int[][] b = new int[][]{{11,12,13,14},{21,22,23,24},{31,32,33,34}};
//动态初始化:
int[][] c = new int[3][4];
int value = 0;
for(int i = 0;i<c.length;i++){
    for(int j = 0;j<c[i].length;j++){
		c[i][j] = ++value;
	}
}

数组-2

在java中有很多方式来存储一列数据,而且在操作上面比数组方便的多?但为什么我们还需要使用数组,而不是替代它呢?

数组与其他种类的容器之间的区别有三个方面呢:效率、类型和保存基本类型的能力。在Java中,数组是一种效率最高的存储和随机访问对象引用序列的方式。

数组确实是没有List、Set这些集合使用方便,但是在某些方面数组还是存在一些优势的,例如:速度,而且集合类的底层也都是通过数组来实现的。

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

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

相关文章

ASUS华硕天选air笔记本FX516P原装出厂原厂Win10系统镜像

ASUS华硕笔记本天选air FX516P原厂Windows10系统恢复原装出厂OEM预装自带系统 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、华硕电脑管家、奥创控制中心等预装程序 链接&#xff1a;https://pan.baidu.com/s/150QimXQfATAhzxNCl690Nw?pwdhvj6 提取码&#xff1a;h…

10年来测试行业所遇问题,功能/接口/自动化测试?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 10年来测试行业发…

Apache Doris (八) :Doris分布式部署(五) Broker部署及Doris集群启动脚本

目录 1.Broker部署及扩缩容 1.1 BROKER 部署 1.2 BROKER 扩缩容 2. Apache Doris集群启停脚本 进入正文之前&#xff0c;欢迎订阅专题、对博文点赞、评论、收藏&#xff0c;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; 1.Broker部署及扩缩容 Broker 是 Doris 集…

【系统架构】第六章-数据库设计基础知识(数据库基本概念、关系数据库)

软考-系统架构设计师知识点提炼-系统架构设计师教程&#xff08;第2版&#xff09; 数据库基本概念 数据库的基础结构是数据模型&#xff0c;数据模型的三要素是数据结构、数据操作和数据的约束条件 数据库三级模式&#xff1a;视图层、逻辑层、物理层 视图层&#xff1a;最高…

Day.2 LeetCode刷题练习(螺旋矩阵)

题目&#xff1a; 例子&#xff1a; 分析题目&#xff1a; 本题给了一个值n要生成一个n*n的矩形&#xff0c;并且是螺旋的生成值。 这样我们可以把它分层来看如n 4时生成一个4*4的矩形由两层矩形构成&#xff0c;这样就能先遍历生成最外面的一层后再去生成里面的一层 那如何…

【VSCODE】4、vscode git pull/push 报错 remote: HTTP Basic: Access denied

一、报错示例 在执行 git pull/push 的时候报错如下 二、解决方式 该问题来自 vscode 的身份验证 打开 vscode →code → 首选项 → 设置搜索 git.terminalAuthentication取消选中该选项重启终端即可

2023黑马头条.微服务项目.跟学笔记(一)

前言 黑马头条一直是黑马培训班内部的项目&#xff0c;应该是今年推出了天机学堂的项目&#xff0c;所以这个头条微服务项目就被公布了&#xff0c;整体上看技术架构丰富&#xff0c;很适合微服务练手和补足。有些技术栈的版本可能是前几年的&#xff0c;不过这个不影响&#x…

医药销售数据分析

阅读原文 一、数据源 来自某医药公司的产品销售数据&#xff0c;时间为 3 月到 5 月&#xff0c;共 48 个 Excel 表格。包含订单信息、售后信息、用户信息以及对应销售人员信息等。 加载合并后得到的原始数据如下&#xff1a; 二、数据清洗 清洗流程以及对应细节 加载数据源 …

多表查询(JOIN)

数据准备 我们需要两个表 student 和 student_score CREATE TABLE student (student_id int NOT NULL,name varchar(45) NOT NULL,PRIMARY KEY (student_id) );CREATE TABLE student_score (student_id int NOT NULL,subject varchar(45) NOT NULL,score int NOT NULL ); 然后…

Linux中tail命令的使用

tail 命令可用于查看文件的内容&#xff0c;有一个常用的参数 -f 常用于查阅正在改变的日志文件。 tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上&#xff0c;并且不断刷新&#xff0c;只要 filename 更新就可以看到最新的文件内容。 tail [参数] [文件] …

553、Vue 3 学习笔记 -【创建Vue 3.0工程(一)】 2023.06.30

目录 一、Vue 3 介绍1. Vue 3 官方文档2. Vue 3带来了什么1.1 性能的提升1.2 源码的升级1.3 拥抱TypeScript1.4 新的特性 二、创建Vue3.0工程1. 使用 vue-cli创建2. 使用vite创建3. 分析工程结构 三、参考链接 一、Vue 3 介绍 1. Vue 3 官方文档 Vue 3 官方的文档地址 2. Vu…

复杂onnx解决方案(以sparseconv为例)

目录 前言1. 稀疏卷积2. Sparse Convolution Model2.1 输入数据模型2.2 卷积核2.3 输出的定义2.4 计算流程2.4.1 构建 hash table2.4.2 构建 Rulebook2.4.3 在GPU上计算Pipeline 2.5 Summary 3. SCN导出3.1 实现trace3.2 导出onnx3.3 CenterPoint SCN导出3.4 执行图的构建3.5 o…

Swagger|SpringBoot集成Swagger用以生成API文档

框架简介 Swagger的作用&#xff1a; 自动生成强大的RESTful API文档&#xff0c;减少开发人员的工作量。使用Swagger&#xff0c;只需在代码中添加一些注解即可生成API接口文档&#xff0c;不需要手动编写API接口文档&#xff0c;这减少了开发人员的工作量。 提供API文档的同步…

西安石油大学 C++期末考试 重点知识点+题目复习(下)

析构函数调用顺序 析构函数的调用顺序与对象的创建和销毁顺序相反。 对于单个对象&#xff0c;当对象的生命周期结束时&#xff08;例如离开作用域&#xff09;&#xff0c;会调用其析构函数。因此&#xff0c;析构函数会在对象销毁之前被调用。 对于类的成员对象&#xff0…

软件工程期末复习-软件设计模式与体系结构-体系结构

目录 软件体系结构概述一、调用-返回风格软件体系结构概念主程序-子程序软件体系结构自顶向下的设计方法的问题结构化设计的优缺点面向对象体系结构面向对象设计的优缺点主程序-子程序与面向对象体系结构相似差异 课程作业 二、数据流风格软件体系结构概念控制流 vs. 数据流数据…

【第一章 flutter学习入门之环境配置】

flutter环境安装 文章目录 flutter环境安装前言一、环境变量配置二、下载Flutter SDK三.排除错误 安装依赖四. 设置Android模拟器五.安装插件VScode打开flutter项目 前言 本文是针对Windows系统环境配置flutter 需要git环境依赖&#xff0c;这里就不做过多赘述 一、环境变量配…

PFASs在固体-溶液体系中分配系数

一、对于PFASs在土壤-溶液体系中的吸附行为,可以用土壤-水分配系数(Kd,L/kg)来表征[1-3]。 Cs为沉积物(sediment)中PFAAs的浓度(ng/g dw);Cw为水(water)中单个PFAAs的浓度(μg/L)。 以往许多研究发现,Ksp与沉积物的有机碳组分有关,表明有机质含量是影响沉积物和孔…

【书】《Python全栈测试开发》——浅谈我所理解的『自动化』测试

目录 1. 自动化测试的What and Why?1.1 What1.2 Why2. 自动化的前戏需要准备哪些必备技能?3. 自动化测试类型3.1 Web自动化测试3.1.1 自动化测试设计模式3.1.2 自动化测试驱动方式3.1.3 自动化测试框架3.2 App自动化测试3.3 接口自动化测试4. 自动化调优《Python全栈测试开发…

PPO算法基本原理及流程图(KL penalty和Clip两种方法)

PPO算法基本原理 PPO&#xff08;Proximal Policy Optimization&#xff09;近端策略优化算法&#xff0c;是一种基于策略&#xff08;policy-based&#xff09;的强化学习算法&#xff0c;是一种off-policy算法。 详细的数学推导过程、为什么是off-policy算法、advantage函数…

47. Compose自定义绘制日历-1

有个日历的需求, 自己实现一下简单的 生成数据 private fun initData() {val listOfCalendar mutableListOf<CalendarData>()val calendar Calendar.getInstance()val todayYear calendar.get(Calendar.YEAR)val todayMonth calendar.get(Calendar.MONTH)val today…