2021-2.2 数组
一维数组的使用
1、一维数组的声明和初始化
2、如何调用数组的指定位置的元素
3、如何获取数组的长度
4、如何遍历数组
5、数组元素的默认初始化值
6、数组的内存解析
package day01;
import java.util.Arrays;
public class Array01 {
public static void main(String[] args) {
// 1、一维数组的声明和初始化
int num; // 声明
num = 10; // 初始化
int id = 1001; // 声明+初始化
int[] ids; // 声明
// 静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[] { 1001, 1002, 1003, 1004 };
// 动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[5];
// 数组一旦初始化完成其长度也就确定了
// 2、如何调用数组的指定位置的元素:通过角标的方式调用
// 数组的索引从零开始,到数组的长度-1结束
names[0] = "张无忌";
names[1] = "赵敏";
names[2] = "迪迦";
names[3] = "赛罗";
names[4] = "戴拿";
System.out.println(Arrays.toString(names));
// 3、如何获取数组的长度:length属性
System.out.println(names.length);
System.out.println(ids.length);
// 4、如何遍历数组
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
}
}
默认初始化
package day01;
import java.util.Arrays;
public class Array01 {
public static void main(String[] args) {
// 数组元素的默认初始化值
int[] arr = new int[4];
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
//这里输出的全是0
}
String [] arr1=new String[4];
for(int i=0;i<arr.length;i++) {
System.out.println(arr1[i]);
//值全为null
}
}
}
数组内存结构
二维数组的使用:
package day01;
public class Arrays02 {
public static void main(String[] args) {
//二维数组的初始化和声明
int [] arr = new int [] {1,2,3};//一维数组的初始化
//静态初始化
int[][] arr1=new int [] [] {{1,2,3},{4,5,6}};//二维数组
//动态初始化
//动态初始化1
String[][] arr2= new String[3][2];
String[][] arr3= new String[3][];
//动态初始化2
//如何掉用数组的指定位置元素
System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//因为,没有赋过值 所以是null
//获取数组的长度
System.out.println(arr1.length);//2
System.out.println(arr1[0].length);//3
//如何遍历二维数组
for(int i=0;i<arr1.length;i++) {
for(int j=0;j<arr1[i].length;j++) {
System.out.println(arr1[i][j]+" ");
}
System.out.println();
}
}
}
package day01;
public class Arrays02 {
public static void main(String[] args) {
//数组元素的默认初始化
int[][] arr=new int[4][3];
System.out.println(arr[0]);//[I@15db9742
System.out.println(arr[0][0]);//0
System.out.println(arr);//[[I@6d06d69c
String[][] arr2=new String[4][2];
System.out.println(arr2[1]);//[Ljava.lang.String;@7852e922
System.out.println(arr2[1][1]);//null
}
}
二维数组内存解析
二维数组的和
package day01;
public class Array03 {
public static void main(String[] args) {
int [][] arr=new int[][] {{1,2,3},{2,4,5,6},{4,56,7}};
int sum=0;
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr[i].length;j++) {
sum+=arr[i][j];
}
}
System.out.println(sum);
}
}
package day01;
/*
* 声明一个int型的一维数组,包含10个元素,分别赋一些随机整数
* 然后求出所有元素的最大值,最小值,和值,平均值,并输出
* 所有随机数都是两位数
*/
public class Array02 {
public static void main(String[] args) {
int[] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * (99 - 10 + 1) + 10);
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
// 求数组的最大值
int max = 0;
for (int i = 0; i < arr.length; i++) {
if (max < arr[i]) {
max = arr[i];
}
}
System.out.println("最大值:" + max);
// 求数组的最小值
int min = arr[0];
for (int j = 1; j < arr.length; j++) {
if (min > arr[j]) {
min = arr[j];
}
}
System.out.println("最小值" + min);
// 求数组的和
int sum=0;
for(int i=0;i<arr.length;i++) {
sum+=arr[i];
}
System.out.println("总和:"+sum);
// 求数组的平均数
int avg=sum/arr.length;
System.out.println("平均数:"+avg);
}
}
package day01;
public class Array04 {
public static void main(String[] args) {
int[] array1, array2;
array1 = new int[] { 2, 3, 5, 7, 11, 13, 17, 19 };
// 显示array1的内容(遍历)
for (int i = 0; i < array1.length; i++) {
System.out.print(array1[i] + "\t");
}
// 赋值array2变量等于array1
array2 = array1;
// 修改array2中的偶数索引,使其等于索引值(array[0]=0,array[2]=2)
for (int i = 0; i < array2.length; i++) {
if (i % 2 == 0) {
array2[i] = i;
}
}
System.out.println();
// 打印出array1
for (int i = 0; i < array1.length; i++) {
System.out.print(array1[i] + "\t");
}
}
}
数组赋值的结果
package day01;
public class Array05 {
public static void main(String[] args) {
int[] array1, array2;
array1 = new int[] { 2, 3, 5, 7, 11, 13, 17, 19 };
// 显示array1的内容(遍历)
for (int i = 0; i < array1.length; i++) {
System.out.print(array1[i] + "\t");
}
// 数组的复制
array2 =new int[array1.length];
for(int i=0;i<array2.length;i++) {
array2[i]=array1[i];
}
// 修改array2中的偶数索引,使其等于索引值(array[0]=0,array[2]=2)
for (int i = 0; i < array2.length; i++) {
if (i % 2 == 0) {
array2[i] = i;
}
}
System.out.println();
// 打印出array1
for (int i = 0; i < array1.length; i++) {
System.out.print(array1[i] + "\t");
}
}
}
数组复制的结果
package day01;
public class Array05 {
public static void main(String[] args) {
int[] array1, array2;
array1 = new int[] { 2, 3, 5, 7, 11, 13, 17, 19 };
// 显示array1的内容(遍历)
for (int i = 0; i < array1.length; i++) {
System.out.print(array1[i] + "\t");
}
// 数组的复制
array2 = new int[array1.length];
for (int i = 0; i < array2.length; i++) {
array2[i] = array1[i];
}
// 修改array2中的偶数索引,使其等于索引值(array[0]=0,array[2]=2)
for (int i = 0; i < array2.length; i++) {
if (i % 2 == 0) {
array2[i] = i;
}
}
System.out.println();
// 打印出array1
for (int i = 0; i < array1.length; i++) {
System.out.print(array1[i] + "\t");
}
}
}
数组的复制及反转
package day01;
import java.util.Arrays;
public class Arraycop {
public static void main(String[] args) {
String[] arr = new String[] { "AA", "BB", "CC", "DD" };
// 数组的复制
String[] arr1 = new String[arr.length];
for (int i = 0; i < arr.length; i++) {
arr1[i] = arr[i];
// System.out.print(arr1[i] + "\t");
}
// 数组的反转
for (int i = 0; i < arr.length / 2; i++) {
String temp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
}
// 遍历
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}
数组的线性查找
package day01;
public class Array06 {
public static void main(String[] args) {
String[] arr = new String[] { "AA", "BB", "CC", "DD" };
// 查找、线性查找
String lookup = "BB";
boolean flag = true;
for (int i = 0; i < arr.length; i++) {
if (lookup.equals(arr[i])) {
flag = false;
System.out.println("找到了指定元素,位置在" + i);
break;
}
}
if (flag) {
System.out.println("很遗憾没找着");
}
}
}
数组的二分法查找
package day01;
public class Array07 {
public static void main(String[] args) {
int[] arr = new int[] {-89,14,-5,89,47,36,45,78,12};
//二分法查找(必须是一个有序数组)
int lookup=47;
int head=0;//初始的首索引
int end=arr.length-1;//初始的末索引
boolean flag=true;
while(head <end) {
int minddle=(head+end)/2;
if(lookup==arr[minddle]) {
System.out.println("你要找的数在"+minddle);
flag=false;
break;
}else if(arr[minddle]>lookup) {
end = minddle-1;
}else {
//arr[minddle]<lookup)
head = minddle+1;
}
}
if(flag==true) {
System.out.println("你要找的数没找着");
}
}
}