数组
一、每日一题 :
1.写出一位数组的初始化的两种方式
int[] arr = new int[5]; // 动态初始化
String[] arr1 = {"Hello", "Good", "GO"}; //静态初始化
数组一旦初始化,其长度就是确定的 :arr.length
数组长度一旦确定就不可以修改
2.写出二维数组初始化的两种方式
int[][] arr = new int[4][5]; // 动态初始化1
int[][] arr1 = new int[4][]; // 动态初始化2
int[][] arr2 = new int[][]{{1, 2, 3}, {2, 3}, {4, 5, 6}}; //静态初始化
3.如何遍历如下的二维数组
题目:
int[][] arr2 = new int[][]{{1, 2, 3}, {4, 5}, {6, 7, 8}};
解:
for (int i = 0; i <arr2.length ; i++) {
for (int j = 0; j <arr2[i].length ; j++) {
System.out.print(arr2[i][j]+"\t");
}
System.out.println();
}
4.不同类型的一位数组元素的默认初始化值各是多少
解:
整形 :0
浮点型 :0.0
char :0(Ascll码为0的值)
Boolean :false
引用类型 :null
5.一位数组的内存解析
题目:
① String [] strs = new String[5];
② strs[2] = "TOM";
③ strs = new String[3];
解:
二、Arrays 工具类使用
1.boolean equals(int] a,int[] b) : 判断两个数组是否相等
int[] arr1 = new int[]{1, 2, 3, 4};
int[] arr2 = new int[]{1, 3, 2, 4};
boolean isEquals = Arrays.equals(arr1,arr2);
System.out.println(isEquals); // false
2.String toString(int[] a) : 输出数组信息
System.out.println(Arrays.toString(arr1)); // 输出数组arry1
3.void fill(int[] a,int val) : 将指定值填充到数组之中
Arrays.fill(arr1,10); // 将10填充到数组 Arry1,即Arry1中的所有元素变为10
System.out.println(Arrays.toString(arr1));
4.void sort(int[] a) : 对数组进行排序
Arrays.sort(arr2); // 升序
System.out.println(Arrays.toString(arr2));
5.int - binarySearch( int [] a , int key ) :二分法查找
int[] array_1 = {14,15,16,17,18,19};
System.out.println(Arrays.binarySearch(array_1,x));
//二分法查找需要将数组进行提前排序,如果数组中有x值,那么将返回正数(数组下标)
//如果查找的元素x数组中没有,那么将返回负数 -(要插入的位置数组下标+1)
三、数组赋值 / 复制
1.赋值
array2 = array1;
如何理解:将array1 保存的数组的地址值赋给了array2,使得array1和array2共同指向堆空间中的同一个数组实体。
2.复制
代码:
int[] arr1 = new int[]{1, 2, 3, 4, 5, 6};
int[] arr2 = new int[arr1.length];
for (int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
如何理解:我们通过new的方式,给array2在堆空间中新开辟了数组的空间。将array1数组中的元素值一个一个的赋值到array2数组中。
这样才是复制,new重新在堆中新建了一个对象,改变arr2中的值,不会影响arr1中的值
3.数组都是指向地址
① int[] array_1 = {65,24,65,35,14,28};
② int[] array_2;
③ array_2 = array_1;
④ array_2[3] = 77;
// 运行结束后 array_1[3] = 77
⑤ array_2 = new int[6];
⑥ array_2[3] = 88;
// 运行结束后 array_2[3] = 88
冒泡排序
int[] arr1 = new int[]{1, 2, 3, 4, 5, 6};
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1.length - 1 - i; j++) {
if (arr1[j] > arr1[j + 1]) {
int teep = arr1[j];
arr1[j] = arr1[j + 1];
arr1[j + 1] = teep;
}
}
}