数组
- 数组是相同类型数据的有序集合
- 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
- 每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们
数组的声明和创建
- 首先必须声明数组变量,才能在程序中使用数组。
- Java语言使用new操作符来创建数组,语法如下:
dataType[] arrayRefVar = new dataType[arraySize];
- 数组的元素通过索引访问的,数组索引从0开始
arrays.length //获取数组长度
内存分析
-
Java内存分析:
-
堆:
-
存放new的对象和数组
-
可以被所有的线程共享,不会存放别的对象引用
-
-
栈:
- 存放基本变量类型(会包含这个基本类型的具体数值)
- 引用对象的变量(会存放这个引用在堆里面的具体地址)
-
方法区
-
数组的内存分析图
- 声明数组时只是在堆中产生数组,实际并为创建数组
- 当创建数组时(也就是new一个数组),会在栈开辟空间用于存放数据
数组的三种初始化
public static void main(String[] args) {
//静态初始化:创建+赋值
int[] a = {1,2,3,4,5};
//动态初始化:包含默认初始化
int[] nums = new int[10];
}
- 默认初始化为数据类型的默认值
数组的使用
- 普通for循环
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5};
//打印全部的数组元素
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]);
}
System.out.println("===========");
//计算所有元素的和
int sum = 0;
for (int i = 0; i < arrays.length; i++) {
sum +=arrays[i];
}
System.out.println("sum="+sum);
System.out.println("===========");
//查找最大元素
int max = arrays[0];
for (int i = 1; i < arrays.length; i++) {
if (arrays[i]>max){
max = arrays[i];
}
}
System.out.println(max);
}
- For-Each循环:一般用于打印输出结果
//JDk1.5,没有下标
for (int array:arrays) {
System.out.println(array);
}
- 数组作方法入参
//方法:打印数组元素
public static void printArray(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.println(arrays[i]);
}
}
- 数组作返回值
//反转数组
public static int[] reverse(int[] arrays){
int[] result = new int[arrays.length];
for (int i = 0, j = arrays.length-1; i < arrays.length; i++,j--) {
result[i] = arrays[j];
}
return result;
}
多维数组
- 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一堆数组,其每一个元素都是一个数组
public static void main(String[] args) {
//二维数组
int[][] arrays = {{1,2},{3,4},{5,6}};
//打印二维数组:利用嵌套循环即可
for (int i = 0; i < arrays.length; i++) {
for (int j = 0; j < arrays[i].length; j++) {
System.out.println(arrays[i][j]);
}
}
}
- 最常用的是二维数组
Arrays类
- 数组的工具类java.util.Arrays
- Arrays类提供了一些基本操作供我们使用
- 可以查看JDK帮助文档
- Arrays类中的方法都是static修饰的方法,我们可以直接使用类名进行调用
- 常用功能:
public static void main(String[] args) {
int[] a = {1,2,3,4,5,8,10,44,6};
//直接打印输出数组元素
System.out.println(Arrays.toString(a));
printArray(a);
//数组排序:升序
Arrays.sort(a);
System.out.println(Arrays.toString(a));
//数组填充
Arrays.fill(a,0);
System.out.println(Arrays.toString(a));
//查找数组元素
int i = Arrays.binarySearch(a, 9);
}
- 类中的方法都是以往程序员编写而来,我们可以便利自己,当想不起使用方法时,也可以自己编写,效果一致