数组

数组

一、一维数组

1.简介

1 .数组是一种数据结构,用于存储多个数据(必须是同一数据类型)
2 .每个数组元素存放一个数据
3 .通常通过数组元素的索引(下标)来访问数组元素(为数组元素赋值或取出数组元素的值)

2. 定义数组的语法

①数据类型 [] 数组名——更倾向于这种
②数据类型 数组名 []
注意:定义数组的时候不能在[]中指定长度

3. 初始化

为数组开辟连续的内存空间,并为每个数组元素赋值

(1) 静态初始化
数组名=new 数据类型[]{元素1,元素2,元素3,元素4,……}

int[] arr;
arr = new  int[]{11, 22, 33, 44, 55}

简写形式:数据类型 [] 数组名 = {元素1,元素2,元素3,元素4,……};

int[] arr = {11, 22, 33, 44, 55} ;

(2) 动态初始化
数组名=new 数据类型[数组长度]

int [] arr = new int[5];

注意: ①.不要同时使用静态初始化和动态初始化(不要在进行数组初始化时,既指定数组长度,又为每个数组元素分配初始值) ② 简写形式声明定义和赋值初始化必须同一行

4. 数组的访问

数组名[数组索引值]
注意:索引值从0开始,0代表数组的第一位元素arr[0]

如果直接输出一个数组,得到的是数组的地址[I@19bb25a
[代表是数组,几个就代表几维
I代表是int类型
@是固定的
19bb25a代表的是数组的十六进制地址值(hashCode)

注意:
使用动态初始化时,系统会为数组元素分配初始值
  数据类型                 初始值
  整数类型(byte、short、int、long)      0
  浮点类型(float、double)        0.0
  字符类型(char)            ’\u0000’(空格)
  布尔类型(boolean)            false
  引用数据类型(类、接口、数组、字符串)  null

5.数组内存分布

动态初始化:

静态初始化:

6. 常见数组相关异常

(1) 数组索引越界异常(ArrayIndexOutOfBoundException)

int [] arr = new int[5];
System.out.println(arr[5]);

(2) 空指针异常(NullPointerException)

int [] arr = new int[5];
arr = null;
System.out.println(arr[0]);

###7. 数组的特点
(1) 一旦数组初始化完成,数组在内存中所占的空间将被固定下来,因此数组的长度将不可改变(集合可变)
(2) 既可以存储基本数据类型的数据,也可以存储引用数据类型的数据,但保存的数据类型必须保持一致
(3) 数组也是一种数据类型,属于引用数据类型

###8. 数组的长度

数组名.length
数组通过length属性,String通过length()方法

###9. 数组的遍历
for(int i=0;i<数组名.length;i++){
System.out.println(数组名[i]);
}

###10. foreach循环
语法:for(数据类型 变量名:数组名或集合名){
//迭代访问每个元素
}

###11. 最值

1
2
3
4
5
6
7
8
9
10
11
//数组中的最值问题
//遍历数组
//对相邻两个元素进行比较,值大的保存到一个临时变量中
//一个一个往后对比
int [] arr11 = {8,28,16,40,88,66,7,55,47,3};
int max = 0;// max在栈里,arr11[i]在堆里
for(int i = 0; i<arr11.length; i++){
if(arr11[i] >= max){
max = arr11[i];
}
}

###12. 反转

1
2
3
4
5
6
7
8
9
10
11
//反转整个数组
int [] arr12 = {10,20,30,40,50,60,70,80,90,100};
int temp = 0;
for(int i = 0; i <arr12.length/2; i++){
temp = arr12[i];
arr12[i] = arr12[arr12.length-1-i];
arr12[arr12.length-1-i] = temp;
}
for(int av : arr12){
System.out.println(av);
}

二、二维数组

可以理解为一种“特殊”的一维数组,每个数组空间中保存的是一个一维数组。

1. 二维数组的声明与空间分配

语法:
① 数据类型 [] [] 数组名 = new 数据类型 [二维数组的长度/包含的一维数组的个数] [每个一维数组的长度]

int [][] arr = new int[3][2];
//二维数组中有3个一维数组
//每个一维数组中有两个元素

② 数据类型 [] [] 数组名 = new 数据类型 [二维数组的长度/包含的一维数组的个数][]

int[][] arr = new int[3][];

③ 数据类型 [] [] 数组名 = { {元素},{元素1, 元素2},……}

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

在某种记忆程度上可以理解成[行数][列数],但仅限记忆

2. 赋值与访问

与一维数组一样,数组下标从0开始,但需要记住必须先分配每个一维数组的长度才能进行赋值与访问
System.out.println(arr);//二维数组
System.out.println(arr[0]);//二维数组的第一个一维数组
System.out.println(arr[0][0]);//二维数组的第一个一维数组的第一个元素

3. 二维数组的遍历

1
2
3
4
5
6
7
int[][] arr = { {1,2,3},{4,5},{6,7,8} };
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
System.out.print(arr[i][j]+ " ");
}
System.out.println();
}

三、 Java 8增强的工具类 :Arrays

java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。

具有以下功能:

给数组赋值:通过 fill()方法。
对数组排序:通过 sort()方法,按升序。
比较数组:通过 equals()方法比较数组中元素值是否相等。
查找数组元素:通过 binarySearch()方法能对排序好的数组进行二分查找法操作。

文章作者: Hai
文章链接: http://yoursite.com/2019/07/17/数组/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hai
打赏
  • 微信
  • 支付宝