数组
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。
概念:
- Java 语言中提供的数组是用来存储固定大小的同类型元素。
特点:
- 数组中的元素类型必须一致
- 数组本身是引用数据类型,但是里面的元素既可以是基本数据类型,也可以是引用数据类型
- 数组的长度一旦给定无法改变
声明:
数据类型 [] 数组名;
数组类型 数组名[]
int[] arr;// 声明数组
String arr1[];//声明数组
值得注意的是在main函数中,只有两个位置可以进行修改:
- args
- [ ] 的位置
数组的动态初始化
定义: 给定数组的长度,由系统分配空间和初始值;
格式: 数据类型[] 数组名 = new 数据类型[长度];
数组中数据的存取
数组的索引: 数组中元素的序号
从0开始的, 最大值就是数组的长度减1
给数组中的元素赋值:
数组名[索引值] = 要赋的值;
取值:
数组名[索引值];
demo1:
int[] arr2 = new int[4];
arr2[0] = 10;
arr2[1] = 20;
arr2[2] = 30;
arr2[3] = 40;
System.out.println(arr2[1]);//20
demo2: 创建一个10个长度的int数组,把1-10 存进去
public class Test1 {
public static void main(String[] args) {
int[] arr = new int[10];
for (int i = 0;i<arr.length;i++){
arr[i] = i + 1;
System.out.print(arr[i]+"\t");
}
}
}
数组的静态初始化
静态初始化:
给定数组中的元素,由系统根据元素的个数开辟空间并赋值
格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3…};
简写: 数据类型[] 数组名 = {元素1,元素2,元素3…}; //只有第一个初始化的时候可以这么写;重新赋值不能这写
获取数组的长度:
数组名.length
demo 创建int数组,存入5个元素,求该数组的元素之和, 平均值
public class Test1 {
public static void main(String[] args) {
//int[] arr = {23,32,42,45,31}; 适用于数组初始化;
int[] arr = new int[]{23,32,42,45,31};
int sum = 0;
for (int i = 0; i <arr.length ; i++) {
sum += arr[i];
}
System.out.println("数组元素之和为" + sum);
System.out.println("数组元素的平均值为:" + (double)sum/arr.length);
}
}
数组的内存分析
- 栈内存: 局部变量和方法 没有初始化值
- 堆内存: new出来的东西 有初始化值
基本: 默认值
引用: null
如果堆中没有栈中变量指向时,就会成为垃圾,等待GC自动回收
demo
public class ArrayDemo2 {
public static void main(String[] args) {
int[] arr = new int[5];// 创建一个5个长度的int类型的数组 arr
System.out.println(arr);// 地址值
System.out.println(arr[0]);// 0
System.out.println(arr[2]);// 0
System.out.println(arr[4]);// 0
arr[3] = 100;
System.out.println(arr[3]);// 100
String[] arr2 = new String[3];
System.out.println(arr2);// 地址值
System.out.println(arr2[0]);// null
System.out.println(arr2[1]);// null
System.out.println(arr2[2]);// null
arr2[1] = "大";
System.out.println(arr2[1]);// 大
String[] arr3 = new String[4];
arr3[1] = "小";
arr3 = arr2;
System.out.println(arr2[1]);// 大
System.out.println(arr3[1]);// 小
System.out.println(arr3[3]);// null
}
}
5.数组中的常见异常
-
空指针异常:java.lang.NullPointerException null调用里面的东西
-
数组角标越界异常:java.lang.ArrayIndexOutOfBoundsException 索引超出了最大范围
public class ArrayDemo5 {
public static void main(String[] args) {
int[] arr = new int[4];
String[] str = new String[3];
"helloworld".equals(str[0]);
"helloworld".equals(null);
}
}
数组最值
打印数组中的最大值和最小值
public static void printMaxAndMin(int[] arr) {
//2.设置一个变量存储最大值
int max = arr[0];
int min = arr[0];
//3.遍历数组,用max和数组中的元素作比较
for(int i=0;i<arr.length;i++) {
if(arr[i]>max) {// 数组中的元素比max大,就把max改了
//重新赋值
max = arr[i];
}
//最小值的比较,如果数组中的元素比最小值还小
if(arr[i]<min) {
min = arr[i];
}
}
//4.在循环的外边打印最大值
System.out.println("最大值为:"+max);
System.out.println("最小值为:"+min);
}
数组逆序
将一个数组逆序排列
public static void arrayReverseOrder(int[] arr) {
System.out.println("逆序前:");
ArrayUtil.printArr(arr);
for (int start = 0, end = arr.length - 1; start < end; start++, end--) {
int temp = arr[end];
arr[end] = arr[start];
arr[start] = temp;
}
System.out.println("逆序后:");
ArrayUtil.printArr(arr);
}