Java虚拟机在执行Java程序时会把它所管理的内存划分为若干个不同的数据区域。
一个数组的内存图解
//创建一个数组,看他在内存中如何分配
int[] arr=new int[3];
//打印数组的地址值
System.out.println(arr);
//[I@1b6d3586
arr[0]=10;
arr[1]=20;
arr[2]=30;
int one=arr[0];
int two = arr[1];
int three = arr[2];
System.out.println(one);
//10
System.out.println(two);
//20
System.out.println(three);
//30
两个数组的内存图解
int[] arr1 = new int[3];
System.out.println(arr1);
//[I@1b6d3586
arr1[0]=200;
int[] arr2 = new int[3];
System.out.println(arr2);
//[I@4554617c
arr2[1]=300;
System.out.println(arr1[0]);
//200
System.out.println(arr1[1]);
//0
System.out.println(arr1[2]);
//0
System.out.println(arr2[0]);
//0
System.out.println(arr2[1]);
//300
System.out.println(arr2[2]);
//0
两个数组三个引用的内存图解
int[] arr1 = new int[3];
arr1[0]= 10;
arr1[1] = 20;
arr1[2] = 30;
int[] arr2 = new int[3];
arr2[0] = 100;
arr2[1] = 200;
arr2[2] = 300;
int[] arr3 = arr1;
arr3[0]= 60;
arr3[1]= 500;
System.out.println(arr1[0]); //60
System.out.println(arr1[1]); //500
System.out.println(arr1[2]); //30
System.out.println("=============================");
System.out.println(arr2[0]); //100
System.out.println(arr2[1]); //200
System.out.println(arr2[2]); //300
System.out.println("=============================");
System.out.println(arr3[0]); //60
System.out.println(arr3[1]); //500
System.out.println(arr3[2]); //30
System.out.println("====================");
//输出数组的地址值
System.out.println(arr1);
//[I@1b6d3586
System.out.println(arr2);
//[I@4554617c
System.out.println(arr3);
//[I@1b6d3586
//判断两个地址值是否相等
System.out.println(arr1==arr3);
//true
//数组的一个默认属性 length 可以获取数组长度
int[] arr=new int[3];
arr[arr.length-1]=100;
//length 数组自带的一个属性,可以动态获取数组的长度
int len=arr.length;
System.out.println(len);
//3
//获取数组的最后一个元素
System.out.println(arr[2]);
//100
//数组最后一个元素的索引=数组的长度-1
System.out.println(arr[arr.length-1]);
//100
//静态初始化
int[] array1 = new int[]{10, 20, 30, 40, 50};
//简化方式
int[] array2 = {10, 20, 30, 40, 50};
数组下标越界异常
int[] array = {10, 20, 30, 40, 50};
//数组一旦定义,数组的长度就不可变了
//System.out.println(array[5]);
//Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
//ArrayIndexOutOfBoundsException:数组下标越界异常
空指针异常
int[] array = {10, 20, 30, 40, 50};
array = null;
System.out.println(array[0]);
//Exception in thread "main" java.lang.NullPointerException
//NullPointerException:空指针异常
1、数组遍历
int[] array = {10, 20, 30, 40, 50, 60};
for (int value : array) {
System.out.println(value);
}
/*
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
*/
for (int j = array.length - 1; j > 0; j--) {
System.out.println(array[j]);
}
//反向遍历
2、数组的最值
//数组获取最值
int[] array = {1, 2, 3, 4, 5};
int maxValue, minValue;
maxValue = minValue = array[0];
for (int i = 1; i < array.length; i++) {
maxValue = maxValue > array[i] ? maxValue : array[i];
minValue = minValue < array[i] ? minValue : array[i];
}
System.out.println("maxValue = " + maxValue);
//maxValue = 5
System.out.println("minValue = " + minValue);
//minValue = 1
3、数组元素反转
//数组元素反转,首尾元素进行交换
int[] array = {1, 2, 3, 4, 5, 6};
for (int i = 0, j = array.length - 1; i < j; i++, j--) {
array[i] = array[i] ^ array[j];
array[j] = array[i] ^ array[j];
array[i] = array[i] ^ array[j];
}
System.out.println(Arrays.toString(array));
//[6, 5, 4, 3, 2, 1]
4、数组查表法
import java.util.Scanner;
//根据索引查元素
public class MyDemo5 {
public static void main(String[] args) {
String[] week = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};
Scanner sc = new Scanner(System.in);
System.out.println("请输入索引(0-6):");
int day = sc.nextInt();
String str = getElementByIndex(day, week);
System.out.println(str);
}
private static String getElementByIndex(int day, String[] week) {
if (day >= 0 && day <= 6) {
return week[day];
}
return "你在搞事情?";
}
}
5、数组元素查找
//查找指定元素第一次在数组中出现的索引
int[] array = {1, 2, 3, 4, 5, 3};
int target = 3;
int index = 0;
while (index < array.length) {
if (target == array[index]) {
break;
}
index++;
}
System.out.println("第一次出现的索引为" + index);
//第一次出现的索引为2
public class MyDemo6 {
public static void main(String[] args) {
String[] week = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期:");
String s = sc.nextLine();
//读取字符串
int index = getIndexByString(s, week);
System.out.println(index);
}
private static int getIndexByString(String str, String[] week) {
for (int i = 0; i < week.length; i++) {
if (str.equals(week[i])) {
return i;
}
}
return -1;
}
}
05、数组(一维数组内存图解、length属性、数组静态初始化、例题)
原文:https://www.cnblogs.com/shawnyue-08/p/12656049.html