整篇文章为对java数组的完整理解以及部分排序,并有一些简单的demo,经典的案例与蓝桥杯的一些经典数组题有专门的文章梳理。

目录

数组概述

什么是数组

数组的结构

数组的特点:

数组分类

一维数组声明与赋值

数组的常用属性与方法

数组的遍历

一维数组demo案例

数组随机赋值

​选择排序

冒泡排序

增强for循环

二维数组声明

二维数组练习题:

交叉数组

交叉数组遍历

总结:


数组概述

什么是数组

单个变量能存储信息。

如果有批量数据需要存储,单个变量存储时间和空间上不经济和实用,而且过于麻烦,这时候需要用数组这一引用数据类型来存储。

数组: 用来存储具有相同数据类型的数据的集合,可以使用共同的名字来引用数组中存储的数据。

特点: 数组可以存储任何类型的数据,包括原始数据类型和引用数据类型,但是一旦指定了数组的类型之后,就只能用来存储指定类型的数据。

数组的结构

数组是一个变量,用于将相同数据类型的数据存储在内存空间中,数组中的所有元素必须属于相同的数据类型。

栈(stack)与堆(heap)都是Java用来在Ram(随机存取存储器)中存放数据的地方。

与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据在多个线程或者多个栈之间是不可以共享的,但是在栈内部多个值相等的变量是可以指向一个地址的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。

数组为了在内存中能够存取多个数据更加方便,在设计数组时,数组的结构和基本要素都与生活中的电子储物柜非常类似。

数组的特点:

  1. 同一个数组中的数组元素必须具有相同的数据类型,且在内存中连续分布。
  2. 无论数组中包含多少个数组元素,该数组只存在一个名称,即数组名。
  3. 数组元素的编号称为下标,数组的下标从0 开始 可以通过“数组名[ 下标]”的方式访问数组中的任何元素。
  4. 数组的长度指数组可以存储元素的最大个数,在创建数组时确定。

数组分类

在Java语言中,存在多种形式的数组。

 

一维数组声明与赋值

int [] array;//整数数组
int array[]= new int[10];
int[] array= new int[10];

数组的常用属性与方法

int[] array= new int[10];
//数组的长度
array.length;
//自然排序
Arrays.sort(array)

数组的遍历

int [] a=new int[10];
for (int i = 0; i < a.length; i++) {a[i]=i+1;
}
for (int i = 0; i < a.length; i++) {System.out.print(a[i]+",");
}

一维数组demo案例

问题描述:输入本部门5位员工的薪资,并根据用户输入的序号为指定员工进行提薪。若用户输入序号出现越界,则提示错误。要求:薪资的涨幅不能超过原薪资的20%,若涨幅超过20%,则按照原薪资的20%进行提薪。

数组随机赋值

package Action;import java.util.Random;public class demos {public static void main(String[] args) {// 声明随机数Random ra = new Random();int[] arrays = new int[10];// 赋值for (int i = 0; i < arrays.length; i++) {arrays[i] = ra.nextInt(50);}// 遍历for (int i = 0; i < arrays.length; i++) {System.out.print(arrays[i] + ",");}}
}

算法中经常会用到某个班级、某个公司、某个集体中随机选某些人,或者棋牌类游戏进行棋牌的分发,彩票的出奖,红包随机分发匹配人员等操作。 所以,我们需要使用一定的算法进行获取一定数量的不重复的随机数数组。

选择排序

package Action;public class demos {public static void main(String[] args) {int count = 0;int[] arr = { 9, 12, 31, 123, 54, 3, 24, 324, 2345, 342 };for (int i = 0; i < arr.length; i++) {// 前者循环次数for (int j = 0; j < arr.length; j++) {// 后者循环次数if (arr[i] > arr[j]) {// 如果i>j就是ture,【1】>【2】int change = arr[i];// 赋值给change,告诉change,i多大arr[i] = arr[j];// arr[j]赋值给arr[i],换位置arr[j] = change;// change赋值给arr[j],进行下一轮比较}count++;}}for (int j2 = 0; j2 < arr.length; j2++) {System.out.print(arr[j2] + ",");}System.out.println("\n循环次数:" + count);// 100次循环}
}

冒泡排序

package Action;public class demos {public static void main(String[] args) {int count = 0;int[] arr = { 9, 12, 31, 123, 54, 3, 24, 324, 2345, 342 };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]) {// 从大到小排列int change = arr[j];arr[j] = arr[j + 1];arr[j + 1] = change;// 值交换}count++;}}for (int j2 = 0; j2 < arr.length; j2++) {System.out.print(arr[j2] + ",");}System.out.println("\n循环次数:" + count);// 45次循环}
}

增强for循环

int nums[] = {1,2,3,4,5,6};
for(int num : nums) {System.out.println(num);
}

二维数组声明

二维数组的创建同样有两种方式

方式一:

使用new 类型[][]数组名= new 类型[行数][列数];

String [][]str = new String[5][5]; 

方式二:

声明数组并且赋初始值

int [][] array = {{23,45,45},{12,11,10},{23,12,56}};

二维数组练习题:

计算二维整数数组两条对角线的值的总和。

int[][] x1 = {{ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, { 1, 2, 3, 4, 5, 6, 7, 8, 9 },{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },{ 1, 2, 3, 4, 5, 6, 7, 8, 9 },};

交叉数组

 int[][] arrays = {{ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, { 1, 2, 3, 4, 5, 6},{ 1, 2, 3, 4, 5, 6, 7 },{ 1, 2, 3, 4, 5, 6},{ 1, 2, 3, 4 },{ 1, 2, 3, 4, 5 },{ 1, 2},{ 1, 2, 3, 4, 5, 6, 7, 8 },{ 1 },};

交叉数组遍历

//交叉数组遍历
for (int i = 0; i < arrays.length; i++) {for (int j = 0; j < arrays[i].length; j++) {System.out.print(arrays[i][j]+",");}System.out.println();}

总结:

数组:一组数据

数组能存储所有数据类型的数据

同一个数组的所有数据必须是同一类型

数组的长度固定,不能改变

数组有一个属性:length

数组对象.length;

数组的长度

分类:一维数组和多维数组

数组的使用

第一步:声明数组变量

数据类型 [] 数组变量名;如:int [] a;

第二步:创建数组对象

new 数据类型[所要创建的数组的长度];

如:new int[5];

第三步:给数组元素赋值

数组变量名[下标]=1;

如:int[] a=new int[5];         a[0]=1;

第四步:访问数组的元素

int max=a[0];    //数组元素的使用,作为数据,给其他变量赋值

System.out.println(a[0]);//把数组元素保存的数据打印输出

【蓝桥杯Java_C组·从零开始卷】第四节、一维数组与二维数组相关推荐

  1. 【蓝桥杯Java_C组·从零开始卷】第一节、环境与变量类型运算符与类型分析

    B站高清回放地址: [https://www.bilibili.com/video/BV1Bm4y1Q7Wt?spm_id_from=333.999.0.0] 目录 一.Java环境搭建与使用(Ecl ...

  2. 【蓝桥杯Java_C组·从零开始卷】第二节(附)、if与switch效率比较(千万次/一亿次)

    前言: 分支数 小于三时,else if 效率更高 等于三时,效率近乎相同 大于三时,switch case效率更高 if与switch小于三次对比: package Action;public cl ...

  3. 【蓝桥杯Java_C组·从零开始卷】第二节、ifswitch(超级详细,适合入门强化学习,理论与实战双保险(2021年12月30日上午9点直播·视频发布B站)

    目录 if语句的三种格式 单分支 简写语法 可能出现的异常 双分支 else if 是多分支件判断·与纯if两者区别 案例一.判断一个正整数的奇偶性 案例二.考试奖励 switch语句三种用法 swi ...

  4. 【蓝桥杯Java_C组·从零开始卷】第四节(附)、河图洛书【九宫格】(卷王必备,不想卷的略过,使用优化暴力破解,与网上莫名其妙的规律不一样)

    目录 河图洛书到底是什么? 一,河图之象 二,河图之数 三.Java二维数组表示方法 河图洛书到底是什么? 河图与洛书是中国古代流传下来的两幅神秘图案,历来被认为是河洛文化的滥觞,中华文明的源头,被誉 ...

  5. 【蓝桥杯Java_C组·从零开始卷】第三节(附)、for循环练习题(数据题与图形题)

    目录 一.基础数据 1.斐波那契数列 2.水仙花数 3.大马驮粮食 4.过路口 5.叠纸 二.图形文打印 1.打印正方形 2.左直角三角形 3.右直角三角形 4.等腰三角形 5.倒左直角三角形 6.倒 ...

  6. 【蓝桥杯Java_C组·从零开始卷】第四节(附)、字符串常用函数

    导读 本文章将java中字符串常用的字符串进行罗列与对应demo的示例,帮助java初学者与蓝桥杯参赛的选手提升对JavaSE的理解. 目录 字符串由来 字符串转成byte数组 常用字符串函数列表: ...

  7. 【蓝桥杯Java_C组·从零开始卷】第三节、while循环do while循环for循环(超重点)break终止循环continue结束本次循环

    开篇主旨--循环四要素 初始值 表达式 循环体 迭代器 所有的循环无论怎么封装,都会遵循着这是个点,就算用hash的方法也算是迭代器的用法. 只要控制好这四个,那么您循环的功底也就满足了,后期递归啥的 ...

  8. 【蓝桥杯Java_C组·从零开始卷】第八节、集合——list详解(ArrayList、 LinkedList 和 Vector之间的区别)

    ArrayList. LinkedList 和 Vector之间的区别 ArrayList. LinkedList 和 Vector都实现了List接口,是List的三种实现,所以在用法上非常相似.他 ...

  9. 【蓝桥杯Java_C组·从零开始卷】第八节、集合——list详解

    由于咱们针对与算法使用,所有会有一些个函数可能平时用不到. 目录 list基础增 删 改 查 算法中最常用的交换 自然排序 反向排序·注不是倒序,不是倒序,不是倒序 随机排序 判断是否有某元素 集合截 ...

最新文章

  1. bootstrap与Select2使用小结
  2. Python 数据结构_队列
  3. 项目托管到Github
  4. python安装scrapy框架命令_python爬虫中scrapy框架是否安装成功及简单创建
  5. SAP CRM BP contact detail - workAddress
  6. 前端学习(1523):vue-cli项目目录介绍
  7. 慕课网上的星级评分--学习视频后模仿实现
  8. Python根据正则表达式找到相应的字符串然后进行替换
  9. 轧机用弹性阻尼体反力计算_「轴承知识」轧机轴承故障频繁怎么办?必要的检查维护不可少...
  10. wordpress 更新以及下载插件:wordpress 安装失败:无法创建目录
  11. 主键重复和唯一索引冲突_深入了解数据库索引
  12. python最简单的爬取邮箱地址怎么写_用python60行代码写一个简单的笔趣阁爬虫!三分一章?...
  13. ArcGIS及ENVI软件下载链接(持续更新...)
  14. JAVA IO流读取中文出现乱码
  15. 每天30分钟学python-每天 3 分钟,小闫带你学 Python(二十三)
  16. Java基础案例教程_Java基础案例教程答案
  17. QQ向陌生人聊天的autoit脚本
  18. Omap4470 USB驱动分析之注册过程
  19. Python音乐跳舞毯(基于海龟画图创作的作品,来自Python创意编程100例sprites篇_Python精灵模块)
  20. 2021年安全员-B证试题及解析及安全员-B证证考试

热门文章

  1. java 生产配置文件管理_JAVA基础——使用配置文件
  2. python获取局域网内的设备_python调用nmap探测局域网设备
  3. echarts树状图点击展开子节点_CPU眼里的结构设备树节点及属性详解
  4. centos yum 安装golang
  5. JS 获取URL 后面的参数
  6. 2014025630《嵌入式程序设计》第七周学习总结
  7. BZOJ 1432 [ZJOI2009]Function
  8. 【2017-04--28】Winform中ListView控件
  9. AC日记——字符替换 openjudge 1.7 08
  10. 程序员选择字体的标准是