Java的数组
-
数组声明创建
-
数组使用
-
多维数组
-
Arrays类(专门用来操作数组的类)
-
稀疏数组(用来压缩数组,使其便于保存,减少空间容量)
数组的声明创建
-
声明数组变量,语法为: 数据类型[ ] 数组名; (首选)。
-
C++声明数组变量,语法为: 数据类型 数组名[ ];(虽然也可以,但是不是首选)。
int[] nums; //这只是声明了一个数组,但未分配空间 -
Java使用new操作符创建数组,语法为: 数据类型[ ] 数组名 = new 数据类型[数组长度];(1是声明,3是创建)
int[] nums = new int[5]; //声明,并创建了数组。分配了一个能放5个int数据的空间 -
获取数组长度:数组名.length
-
给数组元素赋值
nums[0] = 2;
Java内存分析
Java内存分为:堆、栈、方法区
-
堆:
1.1. 存放new的对象和数组。
1.2. 可以被所有的线程共享,不会存放别的对象引用。
-
栈:
2.1. 存放基本变量类型(包含这个基本变量类型的具体数值)。
2.2. 引用对象的变量(会存放这个引用在堆里面的具体地址)。
-
方法区:
3.1. 可以被所有的线程共享
三种初始化方式
静态初始化、动态初始化、默认初始化
-
int[] a = {1,2,3}; -
动态初始化:
int[] a = new int[2]; -
默认初始化:
数组一旦被创建,自己不初始化,Java也会自动初始化。
3.1. 基本数据类型中,整数型:0 ------4个
3.2. 基本数据类型中,浮点型:0.0 ------2个
3.3. 基本数据类型中,布尔型:false ------1个
3.4. 基本数据类型中,字符型(char):空白 ------1个
3.5. 引用数据类型中,String:null
public class HelloWorld {
public static void main(String[] args) {
//基本类型中的整数型
byte[] array1 = new byte[1];
short[] array2 = new short[1];
int[] array3 = new int[1];
long[] array4 = new long[1];
//基本类型中的浮点型
float[] array5 = new float[1];
double[] array6 = new double[1];
//基本类型中的布尔型
boolean[] array7 = new boolean[1];
//基本类型中的字符型
char[] array8 = new char[1];
//引用数据类型String
String[] array9 = new String[1];
System.out.print("基本类型中的整数型:" + "\t" + array1[0] +"\t"+ array2[0] +"\t"+ array3[0] +"\t"+ array4[0] +"\n");
System.out.print("基本类型中的浮点型:" + "\t" + array5[0] +"\t"+ array6[0] +"\n");
System.out.println("基本类型中的布尔型:" + array7[0]);
System.out.println("基本类型中的字符型:" + array8[0]);
System.out.println("引用类型中的String:" + array9[0]);
}
}
输出:
基本类型中的整数型: 0 0 0 0
基本类型中的浮点型: 0.0 0.0
基本类型中的布尔型:false
基本类型中的字符型:
引用类型中的String:null
数组的增强for循环
可以省略下标,语法为:
public class HelloWorld {
public static void main(String[] args) {
int[] arrays = new int[3];
arrays[0] = 1;
arrays[1] = 2;
arrays[2] = 3;
for (int array:arrays){
System.out.println(array);
}
}
}
输出:1, 2, 3
往方法中传数组
public static int max(int[] arrays) {}
举例:写个方法,输出数组中最大元素:
public class HelloWorld {
public static void main(String[] args) {
int[] arrays = {1, 2, 3};
System.out.println("最大元素为:" + max(arrays));
}
public static int max(int[] arrays) {
int max_num = arrays[0];
for (int array : arrays) {
if (array > max_num) {
max_num = array;
}
}
return max_num;
}
}
输出:最大元素为:3
方法中,返回值是数组
举例:写个方法,把输入的数组反转,并输出数组:
与此同时,注意下for循环中,写两个变量的方法,语法为:
public class HelloWorld {
public static void main(String[] args) {
int[] arrays = {1, 2, 3};
int[] new_arrays = reverse(arrays);
for (int x : new_arrays) {
System.out.print(x + "\t");
}
}
public static int[] reverse(int[] arrays) {
int[] new_arrays = new int[arrays.length];
for (int i = 0, j = arrays.length - 1; i < arrays.length; i++, j--) {
new_arrays[j] = arrays[i];
}
return new_arrays;
}
}
输出:3 2
多维数组+增强for循环
多维数组:数组的数组
增强for循环: for (int[] x : arrays) {}
public class HelloWorld {
public static void main(String[] args) {
int[][] arrays = {{1,2},{3,4}, {5,6}}; //3行,2列
for (int[] x : arrays) {
for (int y:x)
System.out.print(y + "\t");
}
}
}
Arrays类
-
Arrays类是数组的工具类,在java.util.Arrays
-
可以通过JDAK的帮助文档,看Arrays中各种方法的使用说明。
![]()
-
Arrays类中的方法都是static修饰的静态方法,可使用类名进行调用。
-
常用功能:
4.1. 给数组赋值:fill(),可以指定第几个到第几个被填充(或覆盖),指定1-3的话,就是第1和2被覆盖了。
4.2. 对数组排序:sort(),按升序(数字越来越大)
4.3. 比较数组:equal(),比较数组中元素值是否相等
4.4. 打印数组:toString(),返回数组内容的字符串形式
4.4. 查找数组元素:binarySearch()对排序好的数组进行二分查找法查找。import java.util.Arrays;
public class HelloWorld {
public static void main(String[] args) {
int[] arrays = {1, 6, 3, 8, 9, 2, 5, 4};
Arrays.fill(arrays, 1, 3, 0); //数组第2到第3个元素被0覆盖
System.out.println(Arrays.toString(arrays)); //输出:[1, 0, 0, 8, 9, 2, 5, 4]
Arrays.sort(arrays); //升序排序
System.out.println(Arrays.toString(arrays)); //输出:[0, 0, 1, 2, 4, 5, 8, 9]
int[] new_arrays = {1, 6};
System.out.println(Arrays.equals(arrays,new_arrays)); //比较数组是否相同。输出:false
System.out.println(Arrays.binarySearch(arrays,8)); //得到元素8的索引。输出:6
}
}
稀疏数组
-
当一个数组中大部分元素为0,或为同样数值时,可以采用稀疏数组来保存该数组。
-
稀疏数组的处理方式为:
2.1. 记录数组一共几行几列,有多少个不同值
2.2. 把具有不同值的元素和行列记录在一个小规模数组总,实现缩小数组规模的效果。
-
图中,左边为原始数组,右边为稀疏数组。
3.1. 原始数组6行7列,其中有效数字个数给8个。
3.2. 这8个有效数字所在的:行、列、值记录下。




浙公网安备 33010602011771号