数组
数组声明创建
数组的声明
dataType[] arrayRefVar;
//int [] array1;
数组的创建
再数组声明之后就可以对数组进行创建。
arrayRefVar = new dataType[arraySize];
//array1 = new int[10];
//或者可以声明、创建一步到位
double[] array2 = new double[10];
int[] array3 = {1,2,3,4,5};
//获取数组长度
int length = array2.length;
打印数组
//方法1
int[] array = {1,2,3,4,5};
for (int value : array) {
System.out.print(value + " ");
}
System.out.println("");
System.out.println("=========");
//方法2
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
/*
out:
1 2 3 4 5
=========
1 2 3 4 5
*/
内存分析
堆
- 堆中存放new的对象和数组;
- 可以被所有的线程共享,不会被别的对象引用。
栈
- 存放基本变量类型(包含该变量类型的具体值);
- 引用对象的变量(会存放这个引用在堆里面的具体地址)。
方法区
- 可以被所有的线程共享;
- 包含所有的class和static变量。
Arrays类
Arrays类中的方法都是static修饰的静态方法,在使用时可以直接使用类名进行调用。
常用方法
//import java.util.Arrays;
//给数组幅值Arrays.fill()
//array1 = {1, 2, 3, 4, 5}
Arrays.fill(array1, 1, 3, 10);
//out: 1 10 10 4 5
//对数组排序
//array2 = {5, 4, 3, 2, 1}
Arrays.sort(array);
//out: 1 2 3 4 5
//比较数组
//array3 = {5, 4, 3, 2, 1}
//array4 = {5, 4, 3, 2, 0}
Arrays.equals(array3, array4);
//out: false
//对排序好的数组进行二分查找法操作
//array1 = {1, 2, 3, 4, 5}
Arrays.binarySearch(array1, 3);
//out: 2
冒泡排序
从后往前,每两个数进行比较,每一次比较后把较大数放在后面,较小数放在前面。
public static int[] sort(int[] array){
int temp = 0;
//flag标识位减少没有意义的循环
boolean flag = false;
for (int i = 0; i < array.length - 1; i++) {
for (int j = 0; j < array.length-i-1; j++) {
if (array[j + 1] < array[j]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = true;
}
}
if(flag == false){
//当发现循环后没有一次交换,则已经有序,不必执行后续比较,直接跳出循环
break;
}
}
return array;
}
稀疏数组
当一个数组中大部分元素为0或者为同一值时,可以使用稀疏数组来保存该数组。
//生成一个稀疏的数组
int[][] array1 = new int[10][10];
array1[1][2] = 1;
array1[3][4] = 2;
array1[5][6] = 3;
System.out.println("生成一个稀疏的数组:");
for (int[] ar1 : array1) {
for (int ar2 : ar1) {
System.out.print(ar2 + " ");
}
System.out.println("");
}
System.out.println("=====================");
//计算该稀疏的数组中非0数的个数
int sum = 0;
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {
if(array1[i][j] != 0){
sum++;
}
}
}
System.out.println("该稀疏的数组中非0数的个数为:"+ sum);
System.out.println("=====================");
//定义稀疏数组
int[][] array2 = new int[sum+1][3];
array2[0][0] = array1.length;
array2[0][1] = array1[0].length;
array2[0][2] = sum;
//生成稀疏数组
int count = 0;
for (int i = 1; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {
if(array1[i][j] != 0){
count++;
array2[count][0] = i;
array2[count][1] = j;
array2[count][2] = array1[i][j];
}
}
}
//打印稀疏数组
System.out.println("稀疏数组为:");
for (int[] arr1 : array2) {
for (int arr2 : arr1) {
System.out.print(arr2 +" ");
}
System.out.println("");
}
/*
out:
生成一个稀疏的数组:
0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 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 3 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数的个数为:3
=====================
稀疏数组为:
10 10 3
1 2 1
3 4 2
5 6 3
*/