数组
定义:若干数据的集合。数组是相同数据类型的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。
基本特点
1长度是确定的。数组一旦被建立,他的大小就是不可以改变的。
2其元素类型必须是相同类型,不允许出现混合类型。
3数组类型可以是任何数据类型,包括基本类型和引用类型。
4数组有索引,索引是从0开始的,到数组.length-1结束。
数组变量属于引用类型,数组也是对象。数组中的每个元素相当于数组的成员变量,数组对象是在堆内存中存储的。
定义数组:int [] arr;
//int arr2[];
//int[] arr3=null; 如果只进行声明,没有后续操作,那么这个数组相当于没定义。数组赋值为空和么有进行赋值的效果不一样。赋值为null时,没有在堆内存中开辟空间,而是在栈内存中赋值为null;
创建 :int [ ] arr=new int [4];
赋值:arr[0] = 12; arr[3] = 47; arr[2] = 98; arr[1] = 56; arr[2] = 66;
数组有默认初始话的值,byte:0 ;short:0; int :0; long:0; float:0 ; double :0; char :'\u0000' ; boolean[] :false;
使用: System.out.println(arr[0]+100);
数组长度:arr.length
遍历数组
普通for循环
int[] scores = new int[10]; ...... for(int i=0;i<=9;i++){ System.out.println("第"+(i+1)+"个学生的成绩为:"+scores[i]); }
增强for循环
int[] scores = new int[10]; ...... for(int num:scores){ System.out.println(num); }
数组初始化
静态初始化
定义数组的同时就为数组元素分配空间并赋值。
int [] arr={12,12,4};
int []arr=new int[]{123,123,324};
注:new int[3]{234,234,2}是错误的
int [] arr;
arr={11,12,34};
是错误的。
动态初始化
数组定义与数组元素分配空间并赋值的操作分开进行。
int [] arr;
arr=new int [3];
arr[0]=12;
arr[1]=12;
arr[2]=12;
默认初始化
数组是引用类型,他的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式呗隐式初始化。
方法的实参传递给形参的时候一定要注意:一切都是值传递: 如果是基本数据类型,那么传递的就是字面值 如果是引用数据类型,那么传递的就是地址值`(即数组传递的是地址)
数组问题
1最值
2查询
3添加元素
当想数组某位置上添加元素时,后面元素都往后挪一个位置,最后一个元素被舍弃,不用添加
4删除元素
当删除某一个元素时,删除元素后面的元素往前挪一,然后最后位置补0
String[] args
在main方法的入口有一个形式参数String [] args是长度为0的数组
可变参数(参数数量可以改变)
int ...num
public static void fun(int ...num){
}
调用:fun(10);fun(10,20,30);fun()
可变参数和其他数据放在一起的时候,可变参数要放在最后面
public static void fun(int a,int ...num){
}
Arrays工具类
用来方便操作数组
int []arr ={1,2,3,4};
toString: Arrays.toString(arr) 对数组进行遍历,返回一个字符串
binarySearch:二分查找法,找出指定数组中指定元素对应的索引,但是这个数组必须是有序数列 ,排序:升序
Arrays.binarySearch(arr)
copyOf:完成数组的复制 Arrays.copyOf(ar)
copyOfRange:区间复制 Arrays.copyOfRange(arr,1,3)
复制arr数组索引1到3的复制,但不包括3 [1,3)
equals:比较数组值是否相等
Arrays.equals(arr1,arr2)
arr1==arr2 ==比较的是两个数组的地址值
fill:数组的填充
Arrays.fill(arr,1)
数组复制
arraycopy(Object src,int srcPos, Object dest, int destPos, int length)
src:源数组
srcPos:原数组的起始位置
dest:目标数组
destPos:目标数组的其实位置
length:要复制数组元素的数量
二维数组
二维数组的本质是一维数组
int [] [] arr= new [3] [];
arr[0]=new int[]{1,1,2,3};
arr[2]=new int [] {2}
二位数组初始化
静态初始化
int [] [] arr={{1,2},{2}}
int [] [] arr=new int[] []{{1,2},{2}};
动态初始化
int[] [] a =new int[2] [];
a[0]=new int[]{1,1,1}