目录
一、定义数组
方法一:
int[] arr2 = new int[]{1, 3, 5};
方法二(方法一的简写):
int[] arr = {1, 3, 5};
①这两种方法虽然没有指定数组的长度,但编译器在编译时会根据{}中的元素个数来确定数组的长度。
②这两种方法初始化之后,想要再初始化就必须以如下形式:
arr = new int[]{1,2,3};否则编译器报错
方法三:
int[] arr3 = new int[3];
注意:①方法一、二的[]里面都不要写数字。
②数组没有初始化的时候,默认值如下表
数组中存储的是引用类型的时候,默认值为null。
补充:
1.
int[] arr = {1, 3, 5};
System.out.println("arr:"+arr);
运行结果
“[”表示这是数组类型
“I”表示数组存的是整数
@后面表示的是地址的哈希值(可以理解为地址)
arr是一个存地址的变量,称这个变量为引用变量简称引用。在引用变量当中存储了对象的地址。数组变量里面存储的就是对象的地址。
2.
数组必须初始化,否则使用时会报错。
不知道初始化什么的时候用null,意思就是,arr这个引用不指向任何对象,所以在使用的时候会报错!!!
报错的意思是:空引用(指针)异常,一般出现这种报错就看看哪个引用为null。
二、 求数组长度(数组元素个数)
数组名.length
System.out.println(arr.length);
三、如何处理数组当中的元素及数组下标相关问题
数组名[合法的下标]。合法的下标:0~数组元素个数(数组长度)-1
访问数组当中的元素:
int[] arr = {1, 3, 5};
System.out.println(arr[0]);
修改数组当中的元素:
int[] arr = {1, 3, 5};
arr[0] = 7;
System.out.println(arr[0]);
当使用不合法的下标时:
称之为数组越界异常
四、数组遍历
方法一:for循环(要用下标)
int[] arr = {5, 6, 7, 8};
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
方法二:for each
for each(没有用到下标)循环当中需要用下标判断数据的时候,不适合用for each
int[] arr = {5, 6, 7, 8};
for (int a :arr) {
System.out.print(a + " ");
}
for(数组中元素的类型:数组名){}
方法三:工具类Arrays
import java.util.Arrays;
public class TestDemo {
public static void main(String[] args) {
int[] arr = {5, 6, 7, 8};
String ret = Arrays.toString(arr);//将传进来的数组以字符串形式输出
System.out.println(ret);
}
一定要引入
输出效果
五、数组与函数
public class TestDemo {
public static void func(int[] arr1){
arr1 = new int[]{1, 2, 3};
}
public static void func2(int[] arr2){
arr2[0] = 9 ;
}
public static void main(String[] args) {
int[] arr = {7, 7, 7};
func (arr);
func2(arr);
System.out.println(Arrays.toString(arr));
}
}
运行结果:
解答:(地址均为假设地址)
最开始:
执行func第一行:改变了arr1指向的对象(就好像0x77不再属于arr1,此时arr1无论做什么都和0x77无关)
执行func2第一行:arr2通过0x77访问到{7, 7, 7},并通过arr2【0】 = 9对
中第一个元素进行赋值。
六、数组作为返回值
public class TestDemo {
public static int[] func(){
int[] arr1 = {7, 7, 7};
return arr1;
}
public static void main(String[] args) {
int[] arr1 = func();
System.out.println(Arrays.toString(arr1));
}
}
七、Arrays工具类
注:使用Arrays工具类的时候一定要引用
import java.util.Arrays;
1、以字符串形式打印数组
Arrays.toString(数组名)。如果需要接收对象,那接收对象的类型一定是Atring类型
public static void main(String[] args) {
int[] arr1 = {7,8,9};
System.out.println(Arrays.toString(arr1));
System.out.println("------------------------");
String ret = Arrays.toString(arr1);
System.out.println(ret);
}
2. 数组拷贝
①Arrays.copyOf(想要拷贝的数组名,新数组的长度);当新数组的长度>想要拷贝的数组的数组长度时,会对接收数组进行扩容;当新数组的长度<想要拷贝的数组的数组长度时,会只拷贝片段。
int[] arr1 = {7,8,9};
int[] copy = Arrays.copyOf(arr1,arr1.length * 2);
System.out.println(Arrays.toString(copy));
②范围拷贝(拷贝数组的一部分):
Arrays.copyOfRange(想要拷贝的数组名,起始下标,结束下标),注:拷贝的其实是【起始下标,结束下标)也就是拷贝到结束下标前一个截止
int[] arr1 = {7,8,9,11,15};
int[] copy = Arrays.copyOfRange(arr1,1,3);
System.out.println(Arrays.toString(copy));
tips:
Java中,from,to一般都是左闭右开的[from,to)
③产生副本
clone();产生对象的一个副本;相当于克隆
int[] arr1 = {7,8,9,11,15};
int[] copy = arr1.clone();
System.out.println(Arrays.toString(copy));
④
和①底层代码差不多,但是少调用一次函数
System.arraycopy(要拷贝的数组,从这个数组的哪个下标开始拷贝,拷贝的目标数组,从目标数组的哪个下标开始拷贝,拷贝的长度)
int[] arr1 = {7,8,9,11,15};
int[] copy = new int[arr1.length];
System.arraycopy(arr1,2,copy,0,arr1.length - 2);
System.out.println(Arrays.toString(copy));
3.二分查找
Arrays.binarySearch(在哪个数组中查找,要查找的数据),由于它的返回值是int所以要用int类型进行接收,没有要找的数据时会返回一个负数。
public static void main(String[] args) {
int[] arr = new int[]{1, 5, 9, 11, 15};
int key = Arrays.binarySearch(arr, 11);
System.out.println(key);
}
4.冒泡排序
Arrays.sort(数组名);
public static void main(String[] args) {
int[] arr = {1, 5, 19, 11, 15};
Arrays.sort(arr);
int key = Arrays.binarySearch(arr,11);
System.out.println(key);
}
5.数组填充
Arrays.fill(数组名,起始下标,终止下标+1,想填充的数据);
public static void main(String[] args) {
int[] arr = new int[7];
Arrays.fill(arr,1,4,7);
System.out.println(Arrays.toString(arr));
}
八、二维数组
1.三种基本的定义二维数组的方式
public static void main(String[] args) {
int[][] arr1 = {{1,2,3},{4,5,6}};
int[][] arr2 = new int[3][4];
int[][] arr3 = new int[][]{{1,2,3},{4,5,6}};
}
Java会根据arr1中的{}来判断二维数组的行和列。
注:定义时可以省略列但不能省略行。数组中列的长度不一样时,称之为不规则数组
2.二维数组的打印
①利用.length
public static void main(String[] args) {
int[][] arr1 = {{1,2,3},{4,5,6}};
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
System.out.print(arr1[i][j] + " ");
}
System.out.println();
}
}
②双重foreach
public static void main(String[] args) {
int[][] arr1 = {{1,2,3},{4,5,6}};
for (int[] tmp:arr1) {
for (int a:tmp) {
System.out.print(a + " ");
}
System.out.println();
}
}
③利用Ararrys
public static void main(String[] args) {
int[][] arr1 = {{1,2,3},{4,5,6}};
System.out.println(Arrays.deepToString(arr1));
}
记得点赞收藏哦!
wink~