概念
数组介绍:相同类型的数据按照一定顺序排列的集合。数组也是一组数据类型,是引用类型 。数组在内存中以连续的内存块进行存储。
数组的长度: arr.length,数组最后位是arr[arr.length-1]
定义与初始化
定义
-
数据类型 数组名[] = new 数据类型[数组长度];数据类型[] 数组名= new 数据类型[数组长度]也是可以的。这样定义数组中的元素是默认值。
java数据类型 默认值 -------------------------------------------- byte, short, int, long 0 double, float 0.0 boolean false char \u0000 引用数据类型 null(空值) -
也可以先声明,再分配空间
java数据类型[] 数组名; 数组名 = new 数据类型[数组长度]; -
静态初始化:
数据类型[] 数组名 = {n1, n2, n3 ... }数据类型[] 数组名 = new 数据类型[]{n1, n2, n3 ... } -
数组的数据类型是引用类型,所以数组变量存储是一个地址,这个地址指向堆内存的一块内存。所以数组一但创建,内存中的长度是固定的,无法更改这块内存的长度。
使用细节:
1.数组中的元素可以进行自动转换。
2.数组属于引用类型,数组型数据是对象
Java 中的[]运算符被预定义为检查数组边界,而且没有指针运算,即不能通过a加1得到数组的下一个元素。
数组赋值机制
基本数据 类型赋值机制是值拷贝。
数组在默认情况下是引用传递,变量里存储的是地址,指向创建的数组,也就是说数组就是一个在堆内存区创建一个对象。
数组操作:
java
import java.util.Arrays;
public class Array02 {
public static void main(String[] args){
copyArr();
revArr();
addArr();
delArr();
}
public static void addArr(){
//定义一个新的数组,长度oldArr.length+1,
//向新的元素赋值给新数组(最后一位);
//将原来的变量指向新数组
int addItem = 10;
int[] arr1 = {1, 3, 4, 5, 6};
printArr(arr1, "原来的数组是:");
int[] temp = new int[arr1.length + 1];
temp[arr1.length] = addItem;
for(int i = 0; i < temp.length; i++){
if(i <= arr1.length - 1){
temp[i] = arr1[i];
}
}
arr1 = temp;
printArr(arr1, "增加元素后是:");
}
public static void delArr(){
//定义一个新的数组, 长度oldArr.length-1,
//获取原来数组中的前oldArr.length-1位的值赋给新数组;
//将原来的变量指向新数组;
int[] arr1 = {1, 3, 4, 5, 6};
printArr(arr1, "原来的数组是:");
int[] temp = new int[arr1.length - 1];
for(int i = 0; i < temp.length; i++){
temp[i] = arr1[i];
}
arr1 = temp;
printArr(arr1, "删除元素后是:");
}
//翻转数组
public static void revArr(){
int[] arr1 = {1, 3, 4, 5, 6};
for(int i = 0; i < (arr1.length / 2); i++){
int temp = arr1[i];
arr1[i] = arr1[(arr1.length - 1)-i];
arr1[(arr1.length - 1)-i] = temp;
}
printArr(arr1, "");
}
//复制数组
public static void copyArr(){
int[] arr1 = {1, 3, 4, 5, 6};
//数组直接赋值,赋值的是地址。两个变量指向同一个内存
int[] arr2 = arr1;
arr2[2] = 5;
System.out.println(arr2[2]);
System.out.println(arr1[2]);
int[] arr3 = Arrays.copyOf(arr1, arr1.length);
arr3[2] = 10;
System.out.println(arr3[2]);
System.out.println(arr2[2]);
System.out.println(arr1[2]);
}
//打印数组
public static void printArr(int[] arr, String str){
System.out.println(str);
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
for(item: conllection){ } collection这一集合表达式必须是一个数组或者是一个实现了Iterable 接口的类对象(例如ArrayList)。
在Java中,允许数组长度为0。在编写一个结果为数组的方法时,如果碰巧结果为空,则这种语法形式就显得非常有用。此时可以创建一个长度为0的数组:
new elementType[0]; //注意,数组长度为0与null 不同。
多维数组(二维):
静态初始化
数据类型[][] 数组名 = {``{...}, {...}, {...}};
动态初始化
数据类型[][] 数组名 = new 类型[长度][长度]
java
数据类型[][] 数组名
数组名 = new 类型[长度][长度]; 第二位的长度可以不写,表示第二位不确定。
数据类型[] 数组名[]
数据类型 数组名[][]
遍历
for循环嵌套遍历
列数不确定:
在java中,二维数组中的(第二列)不是确定的,例如:

代码实现
java
import java.util.Arrays;
public class Array03 {
public static void main(String[] args){
int[][] arr = new int[3][];
for(int i = 0; i < arr.length; i++){
arr[i] = new int[i + 1];
for(int j = 0; j < arr[i].length; j++){
arr[i][j] = i + 1;
}
}
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}