一,数组的基本概念
数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。
二,数组的创立和初始化
数组的创立有三种方式:
int [] arr1= new int[10]; int [] arr2= new int[]{1,2,3,4}; int [] arr3= {1,2,3,4};
(1)静态初始化虽然没有确定[ ]数组的长度,但是编译器会根据{ }中的元素来确定数组的长度
(2)静态初始化时,{ }中的数据类型要与[ ]前的数据类型相同
引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。通过该 地址,引用变量便可以去操作对象。
没有初始化的数组,里面的默认值为0(boolean的默认值为false)。用来存地址的的变量简称为引用变量,arr简称为引用。
三,数组的使用
(1)System.out.println(arr2);---->[I@4eec7777
“[”代表数组,“I”代表类型,为整型,“4eec7777”为经过处理的地址
(2)可通过下标访问数组中的数值,System.out.println(arr2[2]);
(3)遍历数组:
法一:
int [] arr2= new int[]{1,2,3,4}; for (int i = 0; i < arr2.length; i++) { System.out.print(arr2[i]+" "); } System.out.println();
法二(for each):
for(int x :arr2){ System.out.print(x+" "); }
法三:借助java原生方法
String ret=Arrays.toString(arr2); System.out.println(ret);
(4)参数传数组类型
public static int[]func(int [] array){ int []tmp=new int[array.length]; for (int i = 0; i < array.length; i++) { tmp[i]=array[i]*2; }return tmp; } public static void main(String[] args) { int[]array={1,2,3,4}; int[]retArray=func(array); String ret=Arrays.toString(retArray); System.out.println(ret);
(5),排序
int [] arr= new int[]{1,5,3,7}; Arrays.sort(arr); String ret=Arrays.toString(arr); System.out.println(ret);//[1, 3, 5, 7]
数组下标为(2,6]进行排序 int [] arr= new int[]{1,5,3,7,6,23,2}; Arrays.sort(arr,2,6);//[1, 5, 3, 6, 7, 23, 2]
(6)查找数字
int [] arr1= new int[]{1,5,3,7,6,23,2}; System.out.println(Arrays.binarySearch(arr1, 5));arr1数组中要查找的数字5 ->1
(7)复制
int []arr2=Arrays.copyOf(arr,arr.length); int []arr3=Arrays.copyOf(arr,arr.length*2);这种写法可为数组扩容 String ret=Arrays.toString(arr2); String ret1=Arrays.toString(arr3); System.out.println(ret);[1, 5, 3, 7, 6, 23, 2] System.out.println(ret1);[1, 5, 3, 7, 6, 23, 2, 0, 0, 0, 0, 0, 0, 0]
int [] arr= new int[]{1,5,3,7,6,23,2}; int []arr4=Arrays.copyOfRange(arr,1,4);在(1,4]范围内进行复制 String ret=Arrays.toString(arr4); System.out.println(ret);[5, 3, 7]
(8)两数组是否相同
int [] arr1= new int[]{1,5,3,7,6,23,2}; int [] arr3= new int[]{1,5,3,7,6,23,2}; int [] arr2= new int[]{2,5,3,9,6,4,7}; System.out.println(Arrays.equals(arr1, arr2));false System.out.println(Arrays.equals(arr1, arr3));true
(9)填充
int [] arr1= new int[]{1,5,3,7,6,23,2}; Arrays.fill(arr1,2,4,99);arr1数组,从下标2到下标4,之间的数据改为99 String ret=Arrays.toString(arr1); System.out.println(ret);[1, 5, 99, 99, 6, 23, 2]
四,二维数组
必须标清楚几行几列
初始化:
int[][]arr=new int [4][5]; int[][]arr2= {{1, 2, 3}, {2, 3, 4}}; int[][]arr3=new int [][]{{1, 2, 3}, {2, 3, 4}};
遍历数组:
int[][]arr=new int [][]{{1, 2, 3}, {2, 3, 4}}; 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(); }