Java笔记五(数组)

目录

数组

数组声明创建

数组初始化的三种初始化类型:

静态初始化

动态初始化

数组的默认初始化

数组的四个基本特点

数组边界

数组的使用

示例一:计算所有的元素和以及查找最大元素

示例二:For-Each循环

示例三:数组作方法入参

示例四:数组作返回值:数组的翻转

多维数组

多维数组的使用

Arrays类

示例:

冒泡排序

示例:

优化代码:

稀疏数组

存下棋盘:

压缩成稀疏数组:

稀疏数组的还原:


数组

数组是相同类型数据的有序集合

数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成

其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。

数组声明创建

 

首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法

dataType[] arrayRefVar;//首选的方法

dataType arrayRefVar[];//效果相同但不是首选方法,是为了帮助早期的c与c++程序员能快速入手Java

java语言使用new操作符来创建数组,语法如下:

dataType[] arrayRefVar=new dataType[arraySize];

数组的元素是通过索引访问的,数组索引从0开始。

获取数组长度:arrays.length

public class weekend01 {//变量的类型  变量的名字=变量的值;//数组类型public static void main(String[] args) {int[] nums;//声明一个数组nums=new int[10];//创建一个数组//给数组元素中赋值nums[0]=1;nums[1]=2;nums[2]=3;nums[3]=4;nums[4]=5;nums[5]=6;nums[6]=7;nums[7]=8;nums[8]=9;nums[9]=10;System.out.println(nums[9]);//计算所有元素的和int sum=0;//获取数组长度:arrays.lengthfor (int i=0;i<nums.length;i++){sum=sum+nums[i];}System.out.println("总和为:"+sum);}
}

数组初始化的三种初始化类型:

静态初始化

int[] a={1,2,3};

Man[] mans={new Man(1,1),new Man(2,2)};

动态初始化

int[] a=new int[2];

a[0]=1;

a[1]=2;

数组的默认初始化

数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

 

 

public class Weekend02 {public static void main(String[] args) {//静态初始化:创建+赋值int[] a={1,2,3,4,5,6,7,8};System.out.println(a[0]);//动态初始化:包含默认初始化int[] b=new int[10];b[0]=10;b[1]=10;System.out.println(b[0]);System.out.println(b[1]);System.out.println(b[2]);System.out.println(b[3]);}
}

 

数组的四个基本特点

◆其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。

◆其元素必须是相同类型,不允许出现混合类型。

◆数组中的元素可以是任何数据类型,包括基本类型和引用类型。

数组本身就是对象,Java中对象是在堆中的因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

数组边界

◆下标的合法区间; [0, length-1],如果越界就会报错;

◆ArrayIndexOutOfBoundsException :数组下标越界异常!

◆小结:

◆数组是相同数据类型(数据类型可以为任意类型)的有序集合

◆数组也是对象。数组元素相当于对象的成员变量

◆数组长度是确定的,不可变的。如果越界,则报: ArrayIndexOutofBounds

数组的使用

示例一:计算所有的元素和以及查找最大元素

public class Weekend03 {public static void main(String[] args) {int[] arrays={1,2,3,4,5};//打印全部的数组元素for (int i=0;i<arrays.length;i++){System.out.println(arrays[i]);}System.out.println("=============");//计算所有元素的和int sum=0;for (int i=0;i<arrays.length;i++){sum=sum+arrays[i];}System.out.println("sum="+sum);//查找最大元素int max=arrays[0];for (int i=1;i<arrays.length;i++){if (arrays[i]>max){max=arrays[i];}}System.out.println("max="+max);}
}

 

示例二:For-Each循环

 

public class Weekend04 {public static void main(String[] args) {int[] arrays={1,2,3,4,5};for (int array : arrays) {System.out.println(array);//增强for循环}}

 

示例三:数组作方法入参

public class Weekend04 {public static void main(String[] args) {int[] arrays = {1, 2, 3, 4, 5};printArray(arrays);}//打印数组元素public static void printArray(int[] arrays){for (int i=0;i<arrays.length;i++){System.out.print(arrays[i]+" ");}}
}

 

示例四:数组作返回值:数组的翻转

public class Weekend04 {public static void main(String[] args) {int[] arrays = {1, 2, 3, 4, 5};int[] reverse=reverse(arrays);printArray(reverse);}//反转数组public static int[] reverse(int[] arrays) {int[] result = new int[arrays.length];//反转的操作for (int i = 0, j = result.length - 1; i < arrays.length; i++, j--){result[j]=arrays[i];}return result;}//打印数组元素public static void printArray(int[] arrays){for (int i=0;i<arrays.length;i++){System.out.print(arrays[i]+" ");}}
}

 

多维数组

多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一位数组

二维数组

int a[][]=new int[2][5];

以上二维数组a可以看成一个两行五列的数组

 

多维数组的使用
public class Weekend05 {public static void main(String[] args) {int[][] array = {{1, 2}, {2, 3}, {3, 4}, {4, 5}};System.out.println(array[1][0]);System.out.println(array[2][1]);System.out.println("=============");System.out.println(array.length);//外层数组长度System.out.println(array[0].length);//内层数组长度System.out.println("=============");for (int i=0;i<array.length;i++){//循环输出二维数组所有元素for (int j=0;j<array[i].length;j++){System.out.println(array[i][j]);}}}public static void printArray(int[] arrays) {for (int i = 0; i < arrays.length; i++) {System.out.print(arrays[i] + " ");}}
}

 

Arrays类

由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作

需要习惯使用JDK帮助文档

Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用

常用功能:

给数组赋值:通过fill方法

对数组排序:通过sort方法,按升序

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

查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作

示例:

public class Weekend06 {public static void main(String[] args) {int[] a={1,2,3,4,9090,3123,423,23,6};//打印数组元素Arrays.toStringSystem.out.println(Arrays.toString(a));System.out.println("===========================");Arrays.sort(a);//数组进行排序:升序System.out.println(Arrays.toString(a));System.out.println("============================");Arrays.fill(a,1);//数组填充System.out.println(Arrays.toString(a));}
}

 

 

 

冒泡排序

冒泡排序是最为出名的排序算法之一,共有八大排序

这个算法的时间复杂度为O(n^2)

冒泡排序:

1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置

2.每一次比较,都会产生出一个最大,或者最小的数字;

3.下一轮则可以少一次排序

4.依次循环直到结束

示例:

import java.util.Arrays;public class Weekend07 {public static void main(String[] args) {int[] a={1,5,4,6,45,61,49,88,13,9};int[] sort=sort(a);//调用完我们自己写的排序方法以后,返回一个排序后的数组System.out.println(Arrays.toString(sort));}public static int[] sort(int[] array) {int temp = 0;//外层循环,判断这个要走多少次for (int i = 0; i < array.length - 1; i++) {//内层循环,比较判断两个数,如果第一个数比第二个数大则交换位置for (int j = 0; j < array.length - 1-i ; j++) {//减去i的原因是前面的循环以及排序好的数后面的循环可以直接省去不用再次比较排序if (array[j + 1] < array[j]) {temp=array[j];array[j]=array[j+1];array[j+1]=temp;//两个数的交换操作}}}return array;}
}

 

优化代码:

import java.util.Arrays;//冒泡排序:
//1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置
//2.每一次比较,都会产生出一个最大,或者最小的数字;
//3.下一轮则可以少一次排序
//4.依次循环直到结束
public class Weekend07 {public static void main(String[] args) {int[] a={1,5,4,6,45,61,49,88,13,9};int[] sort=sort(a);//调用完我们自己写的排序方法以后,返回一个排序后的数组System.out.println(Arrays.toString(sort));}public static int[] sort(int[] array) {int temp = 0;//外层循环,判断这个要走多少次for (int i = 0; i < array.length - 1; i++) {boolean flag=false;//内层循环,比较判断两个数,如果第一个数比第二个数大则交换位置for (int j = 0; j < array.length - 1-i ; j++) {//减去i的原因是前面的循环以及排序好的数后面的循环可以直接省去不用再次比较排序if (array[j + 1] < array[j]) {temp=array[j];array[j]=array[j+1];array[j+1]=temp;//两个数的交换操作flag=true;}}if (flag==false){break;//优化了多余的无作用的排序}}return array;}
}

 通过判断两个数是否无需排序从而减去循环优化了多余的无作用的排序

 

稀疏数组

 

需求:编写五子棋游戏中,有存盘退出和续上盘的功能

假设白棋为1,黑棋为2,棋盘上空位都为0

分析问题:以为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据

解决;稀疏数组

当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组

稀疏数组的处理方式:

1.记录数组一共有几行几列,有多少个不同值

2.把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

 

 左边为原始二维数组,右边为稀疏数组

 

 

存下棋盘:

 

public class ArrayDemo08 {public static void main(String[] args) {//1.创建一个二维数组 11*11(保存棋盘)//0:没有棋子 1:黑棋 2:白棋int[][] array1=new int[11][11];array1[1][2]=1;array1[2][3]=2;//输出原始的数组System.out.println("输出原始的数组");for (int[] ints : array1) {for (int anInt : ints) {System.out.print(anInt+"\t");}System.out.println();}}
}

 

 

压缩成稀疏数组:

 

public class ArrayDemo08 {public static void main(String[] args) {//1.创建一个二维数组 11*11(保存棋盘)//0:没有棋子 1:黑棋 2:白棋int[][] array1=new int[11][11];array1[1][2]=1;array1[2][3]=2;//输出原始的数组System.out.println("输出原始的数组");for (int[] ints : array1) {for (int anInt : ints) {System.out.print(anInt+"\t");}System.out.println();}System.out.println("=====================");//转换为稀疏数组保存//获取有效值的个数int sum=0;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (array1[i][j]!=0){sum++;}}}System.out.println("有效值的个数:"+sum);//创建一个稀疏数组的数组int[][] array2 = new int[sum+1][3];//有效值的个数+1是行数,列是固定三列array2[0][0]=11;//存的行数array2[0][1]=11;//存的列数array2[0][2]=sum;//存的有效值的个数//遍历二维数组,讲非零的值存放与稀疏数组中int count=0;for (int i = 0; i < array1.length; i++) {for (int j = 0; j < array1[i].length; j++) {if (array1[i][j]!=0){count++;//起到计数的作用array2[count][0]=i;array2[count][1]=j;array2[count][2]=array1[i][j];}}}//输出稀疏数组System.out.println("稀疏数组");for (int i = 0; i < array2.length; i++) {System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t");}}
}

 

 

稀疏数组的还原:

 

public class ArrayDemo08 {public static void main(String[] args) {//1.创建一个二维数组 11*11(保存棋盘)//0:没有棋子 1:黑棋 2:白棋int[][] array1=new int[11][11];array1[1][2]=1;array1[2][3]=2;//输出原始的数组System.out.println("输出原始的数组");for (int[] ints : array1) {for (int anInt : ints) {System.out.print(anInt+"\t");}System.out.println();}System.out.println("=====================");//转换为稀疏数组保存//获取有效值的个数int sum=0;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (array1[i][j]!=0){sum++;}}}System.out.println("有效值的个数:"+sum);//创建一个稀疏数组的数组int[][] array2 = new int[sum+1][3];//有效值的个数+1是行数,列是固定三列array2[0][0]=11;//存的行数array2[0][1]=11;//存的列数array2[0][2]=sum;//存的有效值的个数//遍历二维数组,讲非零的值存放与稀疏数组中int count=0;for (int i = 0; i < array1.length; i++) {for (int j = 0; j < array1[i].length; j++) {if (array1[i][j]!=0){count++;//起到计数的作用array2[count][0]=i;array2[count][1]=j;array2[count][2]=array1[i][j];}}}//输出稀疏数组System.out.println("稀疏数组");for (int i = 0; i < array2.length; i++) {System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t");}System.out.println("=================");System.out.println("还原");//1.读取稀疏数组int[][] array3=new int[array2[0][0]][array2[0][1]];//由稀疏数组得出二维数组的行列数//2.给其中的元素还原它的值for (int i = 1; i < array2.length; i++) {array3[array2[i][0]][array2[i][1]]=array2[i][2];//将有效数字赋值}//打印System.out.println("输出还原的数组");for (int[] ints : array3) {for (int anInt : ints) {System.out.print(anInt+"\t");}System.out.println();}}
}

所有学习资源来自哔哩哔哩——up主遇见狂神说——狂神说Java

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

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

相关文章

Ubuntu 安装 Docker 的详细步骤

文章目录 简介1.更新2.安装必要的软件包2.1 基于阿里源 3.验证 Docker 安装是否成功4.安装后的一些常规设置及常用的命令4.1 启动 Docker4.2 Docker 在系统启动时自动运行4.3 运行一个 Hello World 镜像4.4 查看docker运行状态 欢迎来到这篇关于在 Ubuntu 上安装 Docker 的教程…

鞋类 整鞋试验方法 剥离强度

声明 本文是学习GB-T 3903.3-2011 鞋类 整鞋试验方法 剥离强度. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 GB/T 3903 的本部分规定了整鞋鞋底与鞋帮或外底与外中底之间剥离强度的试验方法。 本部分适用于采用模压、硫化、注塑、灌注、胶…

【c++随笔07】常量、变量、static

【c随笔07】常量、变量、static 1、常量、变量1.1、声明变量1.2、使用常量 2、static介绍2.1、static 局部变量2.2、static 全局变量2.3、C static静态成员变量2.4、C static静态成员函数详解 原创地址&#xff0c;https://zhengjunxue.blog.csdn.net/article/details/13167770…

【数据结构】——顺序表详解

大家好&#xff01;当我们学习了动态内存管理后&#xff0c;就可以写一个管理数据的顺序表了&#xff01;&#xff01;&#xff01; 顺序表的理解&#xff1a; 线性表是最基本、最简单、也是最常用的一种数据结构。线性表&#xff08;linear list&#xff09;是数据结构的一种…

02-Zookeeper实战

上一篇&#xff1a;01-Zookeeper特性与节点数据类型详解 1. zookeeper安装 Step1&#xff1a; 配置JAVA环境&#xff0c;检验环境&#xff1a; java -versionStep2: 下载解压 zookeeper wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeepe…

响应式设计的实现方式

一. 什么是响应式 响应式网站设计是一种网络页面设计布局。页面的设计与开发应当根据用户行为以及设备环境&#xff08;系统平台&#xff0c;屏幕尺寸&#xff0c;屏幕定向等&#xff09;进行相应的响应和调整。 响应式网站常见特点&#xff1a; 1. 同时适配PC平板手机。 2…

Win10自带输入法怎么删除-Win10卸载微软输入法的方法

Win10自带输入法怎么删除&#xff1f;Win10系统自带输入法就是微软输入法&#xff0c;这个输入法满足了很多用户的输入需求。但是&#xff0c;有些用户想要使用其它的输入法&#xff0c;这时候就想删除掉微软输入法。下面小编给大家介绍最简单方便的卸载方法吧。 Win10卸载微软…

Hive【Hive(三)查询语句】

前言 今天是中秋节&#xff0c;早上七点就醒了&#xff0c;干啥呢&#xff0c;大一开学后空教室紧缺&#xff0c;还不趁着假期来学校等啥呢。顺便偷偷许个愿吧&#xff0c;希望在明年的这个时候&#xff0c;秋招不知道赶不赶得上&#xff0c;我希望拿几个国奖&#xff0c;蓝桥杯…

淘宝天猫复制商品链接粘贴到草柴查优惠券iPhone苹果手机粘贴弹窗怎么关闭?

经常在淘宝、天猫、京东网购&#xff0c;挑选商品后复制链接&#xff0c;到草柴APP查询要购买商品的优惠券和返利&#xff0c;iPhone苹果手机每次粘贴复制的商品链接都弹窗提示特别烦人。接下来分享如何关闭草柴APP复制粘贴提醒的弹窗&#xff1b; 如何永久关闭iPhone苹果手机复…

去雨去雪去雾算法之本地与服务器的TensorBoard使用教程

在进行去雨去雾去雪算法实验时&#xff0c;需要注意几个参数设置&#xff0c;num_workers只能设置为0&#xff0c;否则会报各种稀奇古怪的错误。 本地使用TensorBoard 此外&#xff0c;发现生成的文件是events.out.tfevents格式的&#xff0c;查询了一番得知该文件是通过Tens…

28294-2012 钢渣复合料 课堂随笔

声明 本文是学习GB-T 28294-2012 钢渣复合料. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了混凝土用钢渣复合料的术语和定义、原材料组成及要求、强度等级、技术要求、试验方 法、检验规则、包装、标识、运输与贮存。 本标准…

解决内网拉取企微会话存档代理问题的一种办法

问题&#xff1a;客户的服务都是内网的&#xff0c;不能直接访问外网&#xff1b;访问外网的话需要走kong网关才能出去。 会话存档官网说可以使用socket5、http方式拉取会话存档&#xff1b;我这边尝试了直接使用kong网关的ip和端口配置进去&#xff0c;是访问不了的 我后面就…

飞桨EasyDL-Mac本地部署离线SDK-Linux集成Python

前言&#xff1a;本文对使用飞桨EasyDL桌面版实现本地部署物体检测做一下说明 一、训练模型 如何使用飞桨EasyDL桌面版这里就不再赘述&#xff0c;直接参照官方文档进行物体检测模型训练。 飞桨EasyDL桌面版-用零代码开发实现物体检测https://ai.baidu.com/ai-doc/EASYDL/Tl2…

常识判断 --- 科技常识

目录 力与热 光和声 航空成就 垃圾分类 百科知识 血型 二十四节气歌 春雨惊春清谷天 夏满忙夏暑相连 秋处露秋寒霜降 冬雪雪冬小大寒 力与热 光和声 航空成就 垃圾分类 百科知识 血型

【算法系列篇】哈希表

文章目录 前言1. 两数之和1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 判断是否为字符重排2.1 题目要求2.2 做题思路2.3 Java代码实现 3. 存在重复元素3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 存在重复元素II4.2 题目要求4.2 做题思路4.3 Java代码实现 5. 字母异位词分…

ThreeJS-3D教学三:平移缩放+物体沿轨迹运动

我们在项目中会有一些这样的需求&#xff0c;我们可视化一个场景&#xff0c;需要俯视、平移、缩放&#xff0c;方便观察场景中的数据或者模型&#xff0c;之所以把这个案例拿出来 1、这是个很实用的需求&#xff0c;我相信很多人会用到 2、我自己认为在实际案例中我们可以学习…

[NOIP2011 提高组] 选择客栈

[NOIP2011 提高组] 选择客栈 题目描述 丽江河边有 n n n 家很有特色的客栈&#xff0c;客栈按照其位置顺序从 1 1 1 到 n n n 编号。每家客栈都按照某一种色调进行装饰&#xff08;总共 k k k 种&#xff0c;用整数 0 ∼ k − 1 0 \sim k-1 0∼k−1 表示&#xff09;&am…

利用EasyX绘制国旗

所谓国庆&#xff0c;举国同庆 今天我就来分享一下利用图形库来制作一个比例版缩小的五星红旗&#xff08;尽量精确了&#xff09; 需要利用到前边的知识note2基本图形的绘制 进入正题 五星红旗的长和高之比为三比二 创建一个长为960像素&#xff0c;宽为640像素的窗体 更…

Vue3.0跨端Web SDK访问微信小程序云储存,文件上传路径不存在/文件受损无法显示问题(已解决)

整理需求&#xff1a; 需要vue3.0作为pc端的后台管理来连接微信小程序客户端需要Web SDK的引入&#xff0c;实现vue3.0接入云开发环境需要以云环境作为线上服务器&#xff0c;将vue3.0上传的本地文件通过云环境进入云储存&#xff0c;并将文件在云端生成云端快捷访问路径及htt…

排序---P1781 宇宙总统

思路&#xff1a; 当我们要对这些超大数进行比较排序时&#xff0c;如果我们用int或long基本数据类型时&#xff0c;会超出能承载的范围&#xff0c;因此我们选择用引用数据类型&#xff1a;BigDecimal或BigInteger。 区别在于基本数据类型直接比较大小&#xff0c;而是调用这…