01、什么是数组
02、数组的申明和创建
03、三种初始化及内存分析
java内存
-
堆
- 存放new的对象和数组
- 可以被所有的线程共享,不会存放别的对象引用
-
栈
- 存放基本变量类型(会包含这个基本类型的具体数值)
- 引用对象的变量(会存放这个引用在堆里面的具体地址)
-
方法区
- 可以被所有的线程共享
- 包含了所有的class和static变量
。。。
数组三种初始化
- 静态初始化:创建+赋值
- 动态初始化:包含默认初始化
04、下标越界及小结
数组的特点
- 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
- 其元素必须是相同类型,不允许出现混合类型。
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型
- 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。
数组本身就是对象,java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中。
05、数组的使用
数组的反向遍历
获取数组的最大值或者最小值
数组的反转
public static void main(String[] args) {
int[] arrays = {
1, 2, 3, 4, 5};
int[] newArrays = reverseArray(arrays);
printArray(newArrays);
}
public static int[] reverseArray(int[] arrays) {
int len = arrays.length;
int[] newArray = new int[len];
for (int i = 0, j = len - 1; i < len; i++, j--) {
newArray[i] = arrays[j];
}
return newArray;
}
输出
5 4 3 2 1
06、二维数组
public static void main(String[] args) {
int[][] arrays = {
{
1, 2}, {
2, 3}, {
3, 4}, {
4, 5}};
for (int i = 0; i < arrays.length; i++) {
for (int j = 0; j < arrays[i].length; j++) {
System.out.print(arrays[i][j] + " ");
}
}
}
07、Arrays类讲解
java.util.Arrays
- toString
- sort
- fill
…
public static void main(String[] args) {
int[] arrays = {
1, 23, 32, 3, 4, 5, 6, 7};
System.out.println(Arrays.toString(arrays));
Arrays.fill(arrays, 0,1,0);
System.out.println(Arrays.toString(arrays));
Arrays.sort(arrays);
System.out.println(Arrays.toString(arrays));
}
输出
[1, 23, 32, 3, 4, 5, 6, 7]
[0, 23, 32, 3, 4, 5, 6, 7]
[0, 3, 4, 5, 6, 7, 23, 32]
08、冒泡排序
八大排序
冒泡排序
- 比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置
- 每一次比较,都会产出一个最大或者最小的数字
- 下一轮则可以减少一次排序
- 依次循环,直到结束!
public static void main(String[] args) {
int[] arrays = {
23, 455, 56, 7, 78, 8, 54, 5, 7};
sort(arrays);
System.out.println(Arrays.toString(arrays));
}
public static void sort(int[] arrays) {
int len = arrays.length;
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
int temp;
// > 升序 < 降序
if (arrays[j] > arrays[j + 1]) {
temp = arrays[j];
arrays[j] = arrays[j + 1];
arrays[j + 1] = temp;
}
}
}
}
09、稀疏数组
当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组处理方式
- 记录数组一共有几行几列,有多少个不同值
- 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
原始数组
稀疏数组
还原稀疏数组为原始数组
public static void main(String[] args) {
System.out.println("原始数组为");
int[][] array1 = new int[10][10];
array1[0][1] = 1;
array1[1][2] = 2;
printArray(array1);
System.out.println("=============");
int count = getCount(array1);
System.out.println("原始数组中有效元素有:" + count);
System.out.println("转换为稀疏数组为");
int[][] array2 = getSparseArray(array1, count);
printArray(array2);
System.out.println("=============");
System.out.println("还原稀疏数组为");
int[][] array3 = restoreArray(array2);
printArray(array3);
}
private static int[][] restoreArray(int[][] array2) {
int[][] array3 = new int[array2[0][0]][array2[0][1]];
for (int i = 1; i < array2.length; i++) {
array3[array2[i][0]][array2[i][1]] = array2[i][2];
}
return array3;
}
private static int[][] getSparseArray(int[][] array1, int count) {
int[][] array2 = new int[count + 1][3];
array2[0][0] = array1.length;
array2[0][1] = array1[0].length;
array2[0][2] = count;
int index = 1;
for (int i = 0; i < array1.length; i++) {
for (int i1 = 0; i1 < array1[0].length; i1++) {
if (array1[i][i1] != 0) {
array2[index][0] = i;
array2[index][1] = i1;
array2[index][2] = array1[i][i1];
index++;
}
}
}
return array2;
}
private static int getCount(int[][] array1) {
int count = 0;
for (int[] arrays : array1) {
for (int array : arrays) {
if (array != 0) {
count++;
}
}
}
return count;
}
private static void printArray(int[][] array1) {
for (int[] arrays : array1) {
for (int array : arrays) {
System.out.print(array + "\t");
}
System.out.println();
}
}
输出
原始数组为
0 1 0 0 0 0 0 0 0 0
0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
=============
原始数组中有效元素有:2
转换为稀疏数组为
10 10 2
0 1 1
1 2 2
=============
还原稀疏数组为
0 1 0 0 0 0 0 0 0 0
0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0