Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java数组

Java数组

作者头像
全栈程序员站长
发布于 2022-09-07 07:50:38
发布于 2022-09-07 07:50:38
2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

12. Java 数组

一、什么是数组

数组可以理解成一个包含相同类型的有序数字集合 也称储存一组数据的空间 数组属于引用数据类型 int[] a = {1,2,3,4,5}; 集合内的数据称为元素 并按顺序排列 每个元素对应一个元素索引 相当于每个数据的编号 索引的排序是从0开始

二、数组声明定义的语法

基本语法与变量的声明格式类似 格式:数据类型 变量名字 = 变量值

数组声明的两种方式:

首选格式(一般使用风格)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String[] args;

字符串数组类型 名字为 args

C/C++风格(方便C/C++编写者阅读和使用)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
double = number[];

数组如何定义:使用new操作符

数组的两种定义方式:

第一种 动态初始化

构建方法为创建一个int类型引用赋值给number变量 元素的值可以更改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int[] number = new int[2];//单独定义前必须先声明 [2]内为数组的长度
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int[0] = 1;//赋值给元素索引0 数组的第一个数据

没有被赋值的元素为默认值 称为隐式初始化

第二种 静态初始化

把包含元素的一组数据赋值给int数据类型的number变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int[] number = {1,2,3,4,5,6,7,8,9,10};//声明和定义用一段语句来完成

静态初始化后的元素被赋予的值不能改变

定义数组的长度:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int[] number = int[10];//声明并定义一个数组长度为10

循环的范围是数组索引最后一个为止 元素下标是从0到9

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (int i = 0,i < number.length,i++){};

给某个索引赋值时不能大于数组的长度 否则会导致数组下标越界异常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int[9] = 1;//这个一个错误的语句

总结数组的四个特点:

  1. 数组的长度在创建后就不能改变。
  2. 数组内的元素必须是同种类型的数据。
  3. 数组内的元素可以是基本类型也可以是引用类型
  4. 数组属于引用类型数据,所以可以把数组看成一个对象,数组内的元素可以看出是成员变量。数组对象是被储存在堆里的。

三、数组定义简易分析图

Java内存简易的划分为三个区域:栈、堆(包含方法区)。

  1. 栈:存放基本数据类型(包含这个数据类型的具体数据)。
  2. 堆:存放new创建的对象和数组(包括每个数组元素的值)。
  3. 方法区:包含所有class和static修饰符的方法。

分析图:

  1. 当一个数组类型的变量被声明后,在内存中会在栈里生成一个该数组的变量名。
  2. 当使用new操作符定义了数组的大小后,在堆里面创建数组每个元素为默认值的内存。
  3. 数组的每个元素被定义,会对堆中原有的数组内存进行更新。

四、数组的使用

使用数组的三种方式:

  1. 使用普通for循环和增强for循环 打印每个元素
  2. 把数组数据类型的参数传递给void无返回值的函数
  3. 把数组参数传递给有返回值的函数

1. 使用for循环和增强for循环的案例

for循环:

案例:打印数组内每个元素:

由于每一个数组含有多个元素 定义数组的索引为for循环的变量

增强for循环:

案例:打印数组内每个元素

增强for循环的变量用来声明数组的元素

表达式为要访问的数组

2. 定义数组变量传递给空返回值的函数

案例:选出数组中所有奇数

将数组变量传递给函数输出

3. 定义数组参数给有返回值的函数并输出返回值

案例:反转数组中的元素

编程原理:

  1. 首先把传递参数ars数组的长度赋值给result 用于之后返回实参
  2. 创建含有2个变量的循环结构

i变量为ars数组的下标 初始值为0 是ars数组的第一个元素 j变量为result数组的下标 初始值result数组长度为4 是result数组的最后一个元素 i变量的更新方式是自增 j变量的更新方式是自减

循环的表达公式就为:ars数组的第一个元素将result数组的最后一个元素的值覆盖掉

如: result[4] = ars[0] result数组:{0,0,0,0,1} result[3] = ars[1] result数组:{0,0,0,2,1} result[2] = ars[2] result数组:{0,0,3,2,1} result[1] = ars[3] result数组:{0,4,3,2,1} result[0] = ars[4] result数组:{5,4,3,2,1}

  1. result数组为{5,4,3,2,1}返回到ars形参中
  2. 使用引用的方式调用反转函数并循环输出

五、多维数组

多维数组实质意义上就是数组的嵌套使用 比如二维数组中的元素不是数字而是另一个数组

创建一个多维数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int[][] = new int[5][2];

第一个中括号表示最外层的数组长度为5

第二个中括号表示里面的数组长度为2

展开的数组如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int[][] arrays = {{1, 2},{2, 3},{3, 4},{4, 5},{5, 6}};

{1, 2}可以看成是最外层数组的一个元素

简易分析图:

二维数组嵌套两层 n维数组嵌套n层 以此类推

拓展:稀疏数组

定义:若一个数组中含有大量0元素,相同元素。 可以使用稀疏数组进行压缩,将不为0的元素抽取出来储存,从而达到节约空间的作用。 稀疏数组是一种数据结构

使用案例:

多维数组压缩和读取

左边是原始数组 右边为压缩后的稀疏数组也叫稀疏矩阵

稀疏矩阵的参数:

  1. row 表示数组行下标 第一行的row表示整个数组总共有多少行
  2. col 表示数组列下标 第一行的col表示整个数组总共有多少列
  3. value 表示每个坐标对应的元素 第一行的value表示整个数组总共有多少个元素

以下是原数组的代码:

遍历完所有元素后 就需要把所有的无效元素剔除掉

然后需要再遍历一次数组找到那些有效的值

确定了有效元素后 便可以创建稀疏数组的列表了

按照列表格式创建列表头:

总共有3列值 分别是 行 列 值

稀疏数组总共有多少行取决于原数组的有效元素有多少个 在这个基础上要加上列表头的那一行 所以就是count + 1

稀疏数组总共有3列 所以数组长度为3

稀疏数组的列表头构建好之后

接下来就是定义每个有效元素所在的坐标

经过以上步骤已经成功压缩数组

当需要读取原数组内的所有元素时,则需要通过稀疏数组进行还原

代码如下:


六、Arrays类

数组工具类Java.until.Arrays 为数组对象提供一些简单操作的类

Arrays常用方法:

1. 打印数组的每一个元素
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Arrays.tostring(int[]);

参数:

int[] 打印的指定数组名

2. 填充数组元素
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Arrays.fill(int[], fromIndex, toIndex, val);

参数:

int[] 被分配的指定数组名

fromIndex 分配索引的范围的第一个元素索引 被填充的范围包括此索引

toIndex 分配索引范围的最后一个元素索引 小于此索引

val 分配给数组元素的指定值

3. 对数组元素进行排序 升序形式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Arrays.sort(int[]);

参数:

int[] 进行排序的指定数组名

4. 使用二进制算法搜索数组指定元素的索引
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Arrays.binarySearch(int[], key);

注意事项是在数组被排序过才能使用该方法

参数:

int[] 被搜索的指定数组名

key 指定数组的元素


七、数组冒泡排序

原理: 相邻两个元素比较大小。前一个元素比后一个元素大,就交换位置。直到交换到最后一个元素。 每交换一轮,较大的元素会被排在最后面,较小的元素则会排在最前面 每轮排序的元素越来越少,直到没有元素可以交换为止。

冒泡排序代码如下:

内部相邻两个元素交换数值的代码分析如下:

由于每轮排序可能会遇到有相邻两个元素不用交换。 冒泡排序还是会依次走访每一个元素,判断之后才决定是否跳到下一个。 可以写一个优化排序的方法。如果遇到不需要排序的元素时,跳出

在外层循环下定义一个标识位:

在内层循环下写上一个语句:

每次交换数据时 标识位布尔值为true

内层循环结束后建立一个if结构:

内层循环结束后如果没有交换数据 就跳出循环



发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154420.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue2+VueRouter2+webpack 构建项目实战(三)配置路由,整俩页面先
2016年,我写了一系列的 VUE 入门教程,当时写这一系列博文的时候,我也只是一个菜鸟,甚至在写的过程中关闭了代码审查,否则通不过校验。
FungLeo
2022/05/05
5700
Vue2+VueRouter2+webpack 构建项目实战(三)配置路由,整俩页面先
vue嵌套路由
  在实际项目中,多个前端页面由于需求而通常由多层嵌套的组件组合而成,尤其是多导航界面。此时,路由嵌套(vue-router)的优点则表现了出来。嵌套路由就是在一个被路由过来的页面下,可以继续使用路由来加载新的组件。所谓嵌套,也可以理解成父子路由。
流眸
2019/08/12
1.3K0
vue嵌套路由
Vue2+VueRouter2+webpack 构建项目实战(四)接通api,先渲染个列表
2016年,我写了一系列的 VUE 入门教程,当时写这一系列博文的时候,我也只是一个菜鸟,甚至在写的过程中关闭了代码审查,否则通不过校验。
FungLeo
2022/05/05
4510
Vue2+VueRouter2+webpack 构建项目实战(四)接通api,先渲染个列表
Vue2+VueRouter2+webpack 构建项目实战(一)准备工作
2016年,我写了一系列的 VUE 入门教程,当时写这一系列博文的时候,我也只是一个菜鸟,甚至在写的过程中关闭了代码审查,否则通不过校验。
FungLeo
2022/05/05
2740
Vue2+VueRouter2+webpack 构建项目实战(一)准备工作
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(九)再把内容页面渲染出来
本文介绍了如何利用 Vue2+VueRouter2+Webpack+Axios 框架实现一个完整的前端项目,包括列表页面、详情页面、登录页面以及登录逻辑和权限控制。通过实际项目,介绍了如何在实际开发中利用 Vue 及其生态系统,提高开发效率,解决实际问题。
FungLeo
2018/01/08
7440
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(九)再把内容页面渲染出来
Vue2+VueRouter2+webpack 构建项目实战(二)目录以及文件结构
2016年,我写了一系列的 VUE 入门教程,当时写这一系列博文的时候,我也只是一个菜鸟,甚至在写的过程中关闭了代码审查,否则通不过校验。
FungLeo
2022/05/05
3100
Vue2+VueRouter2+webpack 构建项目实战(二)目录以及文件结构
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(三)认识项目所有文件
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(三)认识项目所有文件 在《Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版
FungLeo
2018/01/08
7700
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(四)调整 App.vue 和 router 路由
摘要总结:本篇文章主要介绍了如何通过Vue2+VueRouter2+Webpack+Axios构建项目实战2017重制版,包括项目的目录结构、Vue和VueRouter的配置、Webpack的配置、Axios的配置以及如何在项目中使用axios进行http请求的操作,最后还介绍了如何自定义Vue组件以及如何使用Vue2和VueRouter2实现动态路由和组件显示的切换。
FungLeo
2018/01/08
8680
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(四)调整 App.vue 和 router 路由
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(八)渲染一个列表出来先
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(八)渲染一个列表出来先 前情回顾 在上一篇博文《Vue2+VueRouter2+Webpack+Axios 构建
FungLeo
2018/01/08
9820
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(八)渲染一个列表出来先
Vue2+VueRouter2+webpack 构建项目实战(六)修复代码并通过验证,另发布代码
2016年,我写了一系列的 VUE 入门教程,当时写这一系列博文的时候,我也只是一个菜鸟,甚至在写的过程中关闭了代码审查,否则通不过校验。
FungLeo
2022/05/05
2800
Vue2+VueRouter2+webpack 构建项目实战(六)修复代码并通过验证,另发布代码
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十一)阶段性小结
FungLeo
2018/01/08
9270
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述
本文主要讲解了如何利用 Vue.js 以及 Element UI 实现一个搜索框,并介绍了如何实现搜索后根据匹配到的结果展示对应的内容。同时,也介绍了一些用于富文本编辑的常用插件和工具,如 codemirror、ueditor 和 draft.js。此外,还介绍了一款用于代码编辑器的插件,即 vscode-icons。
FungLeo
2018/01/08
1K0
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(五)配置 Axios api 接口调用文件
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(五)配置 Axios api 接口调用文件 前情回顾 在上一篇《Vue2+VueRouter2+Web
FungLeo
2018/01/08
1.1K0
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(五)配置 Axios api 接口调用文件
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(七)初识 *.vue 文件
FungLeo
2018/01/08
6500
17、webpack从0到1-构建vue项目
讲下webpack中的对于vue配置,其实vue官方就提供了一套模板vue-webpack-template,我们学习学习,然后基于当前自己的项目来配置下。 git仓库:webpack-demo 1、处理vue 对于.vue这种文件,webpack肯定是不认识的,所以我们需要相应的loader来处理它,通过查阅文档我们发现需要安装这两个东西: $ npm install vue-loader vue-template-compiler --save-dev 然后安装文档上面的教程,照猫画虎搞一下。这
Ewall
2020/03/25
5960
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十四)在项目中使用 jQuery
摘要总结:本文介绍了如何在 Vue 2 项目中引入 jQuery,并提供了两种方法来引入,一种是直接引入静态文件,另一种是在项目中使用 NPM 安装。同时,还提供了一种用于测试 jQuery 是否可以正常运行的简单方法。
FungLeo
2018/01/08
1.1K0
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十四)在项目中使用 jQuery
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(六)将接口用 webpack 代理到本地
FungLeo
2018/01/08
9280
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(六)将接口用 webpack 代理到本地
Vue2+VueRouter2+webpack+Axios 构建项目实战(七)重构API文件为使用axios
FungLeo
2018/01/08
1K0
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十二)打包项目图片等资源的处理
摘要总结:本篇文章主要介绍了在Vue2+VueRouter2+Webpack+Axios项目中如何打包项目图片等资源的处理。首先介绍了如何在vue文件中使用图片,然后介绍了在css文件中引用图片的处理方式,最后还介绍了字体图标、js文件等资源的引用方式。在开发模式中,要注意路径的相对性,以避免路径错误。通过在根目录打包项目,可以方便地引用各种资源,从而提高项目的开发效率。
FungLeo
2018/01/08
8340
基于 Webpack & Vue & Vue-Router 的 SPA 初体验
最近这几年的前端圈子,由于戏台一般精彩纷呈,从 MVC 到 MVVM,你刚唱罢我登场。 backbone,angularjs 已成昨日黄花,reactjs 如日中天,同时另一更轻量的 vue 发展势头更猛,尤其是即将 release 的2.0版本,号称兼具了 angularjs 和 reactjs 的两者优点。不过现在的官方版本还是1.0 ,下面就是基于1.0版本的初体验。 1. 为什么要 SPA? SPA: 就是俗称的单页应用(Single Page Web Application)。 在移动端,特别是
腾讯Bugly
2018/03/23
2.2K0
推荐阅读
Vue2+VueRouter2+webpack 构建项目实战(三)配置路由,整俩页面先
5700
vue嵌套路由
1.3K0
Vue2+VueRouter2+webpack 构建项目实战(四)接通api,先渲染个列表
4510
Vue2+VueRouter2+webpack 构建项目实战(一)准备工作
2740
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(九)再把内容页面渲染出来
7440
Vue2+VueRouter2+webpack 构建项目实战(二)目录以及文件结构
3100
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(三)认识项目所有文件
7700
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(四)调整 App.vue 和 router 路由
8680
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(八)渲染一个列表出来先
9820
Vue2+VueRouter2+webpack 构建项目实战(六)修复代码并通过验证,另发布代码
2800
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十一)阶段性小结
9270
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述
1K0
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(五)配置 Axios api 接口调用文件
1.1K0
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(七)初识 *.vue 文件
6500
17、webpack从0到1-构建vue项目
5960
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十四)在项目中使用 jQuery
1.1K0
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(六)将接口用 webpack 代理到本地
9280
Vue2+VueRouter2+webpack+Axios 构建项目实战(七)重构API文件为使用axios
1K0
Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十二)打包项目图片等资源的处理
8340
基于 Webpack & Vue & Vue-Router 的 SPA 初体验
2.2K0
相关推荐
Vue2+VueRouter2+webpack 构建项目实战(三)配置路由,整俩页面先
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验