数组
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
数组格式
格式1: 数据类型[] 数组名;
格式2: 数据类型 数组名[];
举例:
int[] a;定义了一个int类型的数组a;
int a[];定义了一个int类型的a数组;
一般使用第一种定义方式。
数组初始化
Java中的数组必须先初始化,然后才能使用。
初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
初始化的分类
- 动态初始化:只指定长度,由系统给出初始化值。
- 静态初始化:给出初始化值,由系统决定长度。
动态初始化
格式:数据类型[] 数组名 = new 数据类型[数组长度];
数组长度即数组中元素的个数。
举例:int[] arr = new int[3];
定义了一个int类型的数组arr,这个数组可以存放3个int类型的值。
public class shuzu {
public static void main(String[] args) {
int[] arr = new int[3];//动态初始化
System.out.println(arr);//输出数组地址值
arr[0] = 100;
arr[1] = 200;
arr[2] = 300;
//输出数组中的元素
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
数组的内存图解1一个数组
数组的内存图解2二个数组
数组的内存图解3三个引用2个数组
静态初始化
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例:int[] arr = new int[]{1,2,3};
简化格式:数据类型[] 数组名 = {元素1,元素2,…};
举例:int[] arr = {1,2,3};
数组的静态初始化图示
数组的操作
获取数组长度
public class Len {
public static void main(String[] args) {
int[] arr=new int[10];
int len=arr.length;
System.out.println(len);
}
}
遍历
public class bianli {
public static void main(String[] args) {
int[] arr={60,70,80,90,100};
//遍历
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
System.out.println("===============");
//反向遍历
for(int i=arr.length-1;i>=0;i--){
System.out.println(arr[i]);
}
}
}
获取最值
public class Max {
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 1,50}; //{50,40,30,20,10}
int max = getMax(arr);
System.out.println(max);
}
public static int getMax(int[] arr){
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
}
反转
public class fanzhuan {
public static void main(String[] args) {
int[] arr={10,20,30,40,50};
for (int i = 0; i < arr.length/2; i++) {
int t = arr[i];
arr[i]= arr[arr.length - 1-i];
arr[arr.length - 1 - i]=t;
}
System.out.println("========================");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);//{50,40,30,20,10}
}
}
}
查表法
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
String[] arr={"星期一","星期二","星期三","星期四","星期五","星期六","星期天"};
Scanner sc = new Scanner(System.in);
System.out.println("输入数字 0---6");
int num = sc.nextInt();
//根据索引找元素
String element = getElement(num, arr);
System.out.println(element);
}
public static String getElement(int index, String[] arr){
if(index>=0&&index<arr.length){
return arr[index];
}else{
return "你输入的索引不合理";
}
}
}
基本查找
import java.util.Scanner;
public class MyTest2 {
public static void main(String[] args) {
//根据元素找索引
String[] arr = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"};
System.out.println("请输入星期");
Scanner scanner = new Scanner(System.in);
String ele = scanner.nextLine();
int index = getIndexByEle(ele, arr);
System.out.println(index);
}
public static int getIndexByEle(String ele, String[] arr){
int index=-1;
for (int i = 0; i < arr.length; i++) {
//如果你要比较两个字符串字面上的内容是否相同 用方法来比较
if(ele.equals(arr[i])){
return i;
}
}
return -1; //没有找到就返回-1
}
}
数组操作常见问题
越界
ArrayIndexOutOfBoundsException:数组索引越界异常
原因:你访问了不存在的索引。
空指针
NullPointerException:空指针异常
原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。
}
return -1; //没有找到就返回-1
}
}
## 数组操作常见问题
#### 越界
ArrayIndexOutOfBoundsException:数组索引越界异常
原因:你访问了不存在的索引。
#### 空指针
NullPointerException:空指针异常
原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。