1.数组
-
用来存储一组相同数据类型的集合(容器)。
-
特点
1.数组中元素类型必须一致。 2.数组本身是引用数据类型,但是里面元素就可以是基本数据类型,也可以是引用数据类型。 3.数组的长度都一旦给定无法改变。
-
声明数组格式
数据类型[] 数组名 数据类型 数组名[]
-
数组声明
int[] arr
1.1动态数组初始化
- 动态初始化
// 数据类型[] 数组名 new 数据类型[长度]
int[] arr=new int[4];
-
数组的索引:从0开始,最大值就是数组长度减1.
-
给数组中元素赋值:
数组名[索引值]= 要赋的值;
-
demo
package Array; public class ArrayDemo1 { public static void main(String[] args) { int [] arr; arr = new int[4]; arr[2] = 4; arr[3] = 66; System.out.println(arr[0]);// 0 System.out.println(arr[2]);// 4 } }
-
创建一个String类型4个长度数组,把四个季节存储到该数组中
package Array; public class ArrayDemo2 { public static void main(String[] args) { String[] arr; arr = new String[4]; arr[0] = "春天"; arr[1] = "夏天"; arr[2] = "秋天"; arr[3] = "冬天"; System.out.println(arr.length); for(int i=0;i<arr.length;i++) { System.out.println(arr[i]); } } }
-
创建一个char类型的数组,把"你","好"分别存进去
package Array; public class ArrayDemo2 { public static void main(String[] args) { char[] arr = new char[2] arr[0] = '你'; arr[1] = '好'; } }
-
创建一个长度10的int数组,把1-10存储进去
package Array; public class ArrayDemo2 { public static void main(String[] args) { int[] arr = new int[10]; for (int i=0; i<10; i++) { arr[i] = i+1; } } }
1.2.静态初始化
-
给定数组中元素,由系统根据元素个数开辟空键并赋值。
-
格式
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素2......} 简写: 只有第一个初始化时候才可以这么书写,重新赋值不能这么写 数据类型[] 数组名 = {元素1,元素2,元素2......}
-
demo
int[] arr2 = new int[] {1,3,4,5,2,2,55,3}; arr2 = new int[] {3,4,6};
-
创建int数组,存入5个元素,求该数组元素之和,平均值
package Array; public class ArrayDemo3 { public static void main(String[] args) { int sum = 0; int[] arr = new int[] {1,6,23,5,9}; for (int i=0;i<arr.length;i++) { sum += arr[i]; } System.out.println("求和:"+ sum);// 44 System.out.println("平均值:" + (double)sum/arr.length);// 8.8 } }
1.3数组内存分析
- 在java中内存分配:栈和堆,栈中存储局部变量,方法的执行。堆可以简单理解new出来的东西。
- 存储在堆内粗中数据类型是有默认值的,如果是引用类型为null。
// 解析:
在我们通过new int[5] 时候会在堆开辟一个5个长度数组空间,并形成一个地址,通过在main种,int arr 指向该数组内存地址,当我们给数组内元素赋值,首先根据内存地址找到该数组堆空间位置,并修改相应的值。
1.4 数组中常见2种异常
- 空指针异常
package Array;
public class ArrayDemo4 {
public static void main(String[] args) {
int[] arr = null;
System.out.println(arr);
// 当用null调用里面数据和方法,会出现空指针异常
System.out.println(arr[0]);
}
}
- 数组角标越界异常
arr = new int[3];
System.out.println(arr[3]);
1.5数组练习案例
- 点名系统,从班级所有人姓名种随机抽选一个人:
package Array;
import java.util.Random;
public class ArrayDemo5 {
public static void main(String[] args) {
String[] names = new String[]{"小明","小刘","小刚","小邱","小赵"};
// 创建Random对象
Random r = new Random();
// 生成随机数 下面生成数0<=num<10
int num = r.nextInt(names.length);
System.out.println(names[num]);
}
}
1.6数组的打印及工具类
- Array.ArrayDemo
package Array;
import util.ArrayUtil;
public class ArrayDemo6 {
public static void main(String[] args) {
int[] arr = {13, 15, 16,40};
String[] arr2 = {"小明", "小洪", "小刚"};
ArrayUtil.printArr(arr);
ArrayUtil.printArr(arr2);
}
}
- util.ArrayUtil
package util;
public class ArrayUtil {
// 接收int类型
public static void printArr(int[] arr) {
for(int i=0;i<arr.length;i++) {
if (arr.length == 1) {
System.out.println("[" + arr[0] + "]");
} else if (i == 0) {
System.out.print("[" + arr[i] + ",");
}else if (i == arr.length-1) {
System.out.println(arr[i] + "]");
}else {
System.out.print(arr[i] + ",");
}
}
}
// 方法重载 接收string
public static void printArr(String[] arr) {
for(int i=0;i<arr.length;i++) {
if (arr.length == 1) {
System.out.println("[" + arr[0] + "]");
} else if (i == 0) {
System.out.print("[" + arr[i] + ",");
}else if (i == arr.length-1) {
System.out.println(arr[i] + "]");
}else {
System.out.print(arr[i] + ",");
}
}
}
}
1.7数组中的最值
// 主函数
package Array;
import util.ArrayMaxMin;
public class ArrayDemo7 {
public static void main(String[] args) {
// 创建一个数组
int[] arr = {23,555,32,13,1,55};
ArrayMaxMin.arrMaxMin(arr);
}
}
// 工具类
package util;
public class ArrayMaxMin {
public static void arrMaxMin(int[] arr) {
// 设置一个变量存储最大值
int max = arr[0];
int min = arr[0];
// 遍历数组用max和数组中元素比较
for(int i=0;i<arr.length;i++) {
if (arr[i] > max) {
max = arr[i];
}
if (arr[i]< min) {
min = arr[i];
}
}
System.out.println(max);// 555
System.out.println(min);// 1
}
}
1.8数组元素交换
package Array;
import util.ArrayUtil;
public class ArrayDemo8 {
public static void main(String[] args) {
int[] arr = new int[] {100,200};
int tmp = arr[0];
arr[0] = arr[1];
arr[1] = tmp;
ArrayUtil.printArr(arr);
}
}
1.9数组的逆序
- 方式1:
package Array;
import util.ArrayUtil;
public class ArrayDemo9 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8};
int tmp;
for (int i=0;i<arr.length/2;i++) {
tmp = arr[i];
arr[i] = arr[arr.length-i-1];
arr[arr.length-i-1] = tmp;
}
ArrayUtil.printArr(arr);// [8,7,6,5,4,3,2,1]
}
}
- 方式2:
package Array;
import util.ArrayUtil;
public class ArrayDemo9 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8};
for(int start=0,end=arr.length-1; start< end; start++,end--) {
int tmp = arr[start];
arr[start] = arr[end];
arr[end] = tmp;
}
ArrayUtil.printArr(arr);
}
}
1.10多维数组
- n 维数组就是元素为n-1维数组的数目。
- 二维数组格式:
1.数据类型[][] 数组名 = new 数据类型[m][n]
m: 二维数组中一维数组的个数
n: 一维数组中元素个数
2. 数据类型[][] 数组名 = new 数据类型[m][];
m: 二维数组中一维数组的个数
3. 数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...}}
- 二维数组定义方式:
- 方式1:
int[][] arr = new int[4][3];
System.out.println(arr);// [[I@7c75222b
System.out.println(arr[0]);// [I@4c203ea1
System.out.println(arr[0][0]);// 0
// 给第二个数组中的第二个元素赋值给100
arr[1][1] = 100;
// 打印最后一个数组中最后一个元素
System.out.println(arr[3][2]);
- 方式2:
// 注意:给二维数组内一维数组赋值时候,不能简写
int[][] arr2 = new int[5][];
arr[0] = new int[] {1,2,3,4,5,6};
arr[1] = new int[] {1,2,3};
- 方式3:
int[][] arr3 = new int[][] {{2,3,5,6},{4,5,3}};
System.out.println(arr3.length);// 2
System.out.println(arr3[0].length);// 4
System.out.println(arr3[0][3]);// 6
- 二维数组中遍历:
for(int i=0;i<arr3.length;i++) {
ArrayUtil.printArr(arr3[i]);
}
// [2,3,5,6]
// [4,5,3]