Java数组详解

数组详解

1、数组概述

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

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

2、数组声明和创建

①数组声明形式

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

dataType arrayRefVar[];

②数组的创建

dataType[] arrayRefVar=new dataType[arraySize];

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

3、内存分析及三种初始化方式

①Java内存

②定义数组时内存分配情况

1.声明数组—int[] array=null;

在栈中存放变量,如图所示

2.创建数组—array=new int[5];

在堆中开辟空间,如图所示

3.给数组元素赋值

array[0]=0;array[1]=1;array[2]=2;未赋值元素是默认值0

③三种初始化方式

1.静态初始化

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

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

2.动态初始化

int[] array=new int[2];

array[0]=1;

array[1]=2;

3.默认初始化

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

4、数组基本特点

①数组长度是确定的

②元素必须是相同类型

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

④数组对象本身是保存在堆中的,数组也是对象

5、数组边界问题

①下标合法区间—[0,length-1]

②数组越界会报ArrayIndexOutOfBoundsException异常

6、数组的使用

①For—Each循环

1 public class Demo1 {

2 public static void main(String[] args) {

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

4 for(int array:arrays){

5 System.out.println(array);

6 }

7 }

8 }

②数组作方法入参

public static void printArray(int[] arrays){

for(int i=0;iarrays.length;i++){

System.out.print(arrays[i]+" ");

}

}

③数组作为返回值

public static int[] reverse(int[] arrays){

int result[]=new int[arrays.length];

int i=0;

for(int j=arrays.length-1;j=0;j--){

result[i]=arrays[j];

i++;

}

return result;

}

7、多维数组

多维数组可以看成是数组的数组

例如:int[] [] nums=new int[3] [2];

8、Arrays类

①数组的工具类java.util.Arrays,Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用

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

System.out.print(Arrays.toString(a));//输出数组元素

方法名作用

toString(a)

输出数组元素

sort(a)

按升序对数组元素进行排序

equals(a1,a2)

比较数组元素是否相等

binarySearch(a,3)

查找指定元素索引值

fill(a,2)

给数组赋值

9、稀疏数组

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

②稀疏数组的处理方式是:

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

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

1 public class Sparse {

2 public static void main(String[] args) {

3 //定义一个数组

4 int array1[][]=new int[6][6];

5 array1[0][2]=3;

6 array1[3][3]=6;

7 array1[5][5]=2;

8 printArray(array1);

9 ?

10 System.out.println("===========================");

11 //遍历数组获取非零个数

12 int sum=0;

13 for(int i=0;iarray1.length;i++){

14 for(int j=0;jarray1[i].length;j++){

15 if(array1[i][j]!=0){

16 sum++;

17 }

18 }

19 }

20 ?

21 //定义一个稀疏数组

22 int array2[][]=new int[sum+1][3];

23 array2[0][0]=6;

24 array2[0][1]=6;

25 array2[0][2]=sum;

26 int count=1;

27 for(int i=0;iarray1.length;i++){

28 for(int j=0;jarray1[i].length;j++){

29 if(array1[i][j]!=0){

30 array2[count][0]=i; //保存行

31 array2[count][1]=j; //保存列

32 array2[count][2]=array1[i][j]; //保存值

33 count++;

34 }

35 }

36 }

37 System.out.println("稀疏数组内容");

38 printArray(array2);

39 ?

40 System.out.println("===========================");

41 ?

42 //根据稀疏数组还原数组

43 int array3[][]=new int[array2[0][0]][array2[0][1]];

44 for(int i=1;iarray2.length;i++){

45 array3[array2[i][0]][array2[i][1]]=array2[i][2];

46 }

47 printArray(array3);

48 ?

49 }

50 public static void printArray(int[][] array){

51 for(int i=0;iarray.length;i++){

52 for(int j=0;jarray[i].length;j++){

53 System.out.print(array[i][j]+" ");

54 }

55 System.out.print("\n");

56 }

57 }

58 }

Java数组详解 相关文章

equals和hashCode详解

equals和hashCode详解 http://wwwblogs/Qian123/p/5703507.html 阅读目录 equals()方法详解 hashcode() 方法详解 Hashset、Hashmap、Hashtable与hashcode()和equals()的密切关系 java.lang.Object类中有两个非常重要的方法: public boolean equals(O

IO流

IO流 IO流的四大家族 /** * java.io.InputString 字节输入流 * java.io.OutputString 字节输出流 * java.io.Reader 字符输入流 * java.io.Writer 字符输出流 */ 所有的流都实现了java.io.Closeable接口,都有close()方法,用完流之后一定要记得关闭,不然会占用

Java初学者入门之常用的运算符

运算符 Java语言中现在支持以下六种运算符 算术运算符 、 赋值运算符 、 关系运算符 、 逻辑运算符 、 位运算符 、 条件运算符 当然也可以分成 一元运算符 、 二元运算符 、 三元运算符 算术运算符 像最基本的 + 、 - 、 * 、 / 都是算数运算符,除此之外还

SPI/QSPI通信协议详解和应用

SPi是高速全双工的串行总线,通常应用在通讯速率较高的场合。 SS:从设备选择信号线,也称片选信号线 每个从设备都有一个独立的SS信号线,信号线独占主机的一个引脚,及有多少个从设备就有多少个片选信号线, I2c是通过设备地址来寻址,选中总线上的某个设备

6. Vue3 JavaScript表达式 、条件判断、 计算属性和watch侦听

一、Vue3.x模板中使用JavaScript表达式 业务逻辑: data() { return { number: 1 }} template模板 : {{ number + 1 }} {{ ok 'YES' : 'NO' }}{{ message.split('').reverse().join('')}} 二、 v-if v-else v-else-if v-show 2.1 v-if 业务逻辑: data() { ret

【史上最全】Hadoop 核心 - HDFS 分布式文件系统详解(上万字建议收藏)

1. HDFS概述 Hadoop 分布式系统框架中,首要的基础功能就是文件系统,在 Hadoop 中使用 FileSystem 这个抽象类来表示我们的文件系统,这个抽象类下面有很多子实现类,究竟使用哪一种,需要看我们具体的实现类,在我们实际工作中,用到的最多的就是HDFS(分布

Day02Java背景、基础语法

Java 背景 Java、javac编译运行java javadoc生成文档 jar把java打包成应用 JRE: Java Runtime Environment 运行环境 JDK: Java Development Kit 包含JRE,并在JRE基础上多了些开发工具,给开发者使用 JVM: Java Virtual Machine 虚拟机 安装开发环境 JDK下载

刷题-力扣-987

978. 最长湍流子数组 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn/problems/longest-turbulent-subarray/ 作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 题目描述 当 A 的子数组 A[i], A[i+1], ..., A[j] 满足下

基于C语言的java串口通信程序(二)

二、JAVA-JNI ?java程序调用C++程序 ??参考博客 ??在写java程序调用C程序之前,写过C#程序调用用C#封装好的dll程序。然后,我以为,java程序调用C程序也可以直接把C封装好的dll程序拿过来直接用就好。结果就是一直报错。那么接下来就是正确的调用方式。 工具

Java Vector类的使用

Vector类实现了一个动态数组。和ArrayList很相似,但两者是不同的: Vector是同步访问 Vector包含了许多传统的方法,这些方法不属于集合框架。 Vector只要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。 Vector有四种构造方法。 第

更多推荐

java合法的数组声明_Java数组详解