一 数组
1.使用数组时常用的异常
(1)数组索引越界异常: ArrayIndexOutOfBoundsException:
索引超出范围
负数索引
(2)空指针异常: NullPointerException
数组的值赋值为null
2.二维数组
数组中嵌套数组
(1)二维数组的声明:
数据类型[ ][ ] 数组名; --推荐使用
数据类型 数组名[ ][ ];
数据类型[ ] 数组名[ ];
(2)二维数组的创建:
数据类型[ ][ ] 数组名=new 数据类型[一维的长度][二维的长度];
数据类型[ ][ ] 数组名=new 数据类型[一维的长度][];
数组名[一维的索引]=new 数据类型[二维的长度]; --创建一维数组的方式都可以
数据类型[ ][ ] 数组名=new 数据类型[ ][ ]{{1,2},{1,2,3},{1},{1,2,3,4}};
(3)二维数组的遍历:
双重for循环
3.数组排序
(1)冒泡排序
每两个数据之间进行比较一次,找出最大的或者最小的进行交换 做升序
Int[ ] arr={5,2,7,8,3};
第一轮: 2,5,7,3,8 比较出最大的数据放在了最后的位置 i=0
第二轮: 2,5,3,7 i=1
第三轮: 2,3,5 i=2
第四轮: 2,3 i=3
这一轮中参与比较数据的个数 arr.length-i
冒泡排序代码
public static int[ ] bubble(int[ ] arr){
//外层循环 i控制比较轮数
for(int i=0;i<arr.length-1;i++){
//m 每一轮中,每两个数据比较, m,m+1这两个索引位置的数据进行比较
for(int m=0;m<arr.length-i-1;m++){
if(arr[m] > arr[m+1]){
int temp=arr[m];
arr[m]=arr[m+1];
arr[m+1]=temp;
}
}
}
return arr;
}
//遍历int数组
public static void print(int[ ] arr){
for(int i:arr){
System.out.print(i+" ");
}
System.out.println();
}
(2)选择排序
每一轮确定一个主场数据,拿这个数据后它后面的每一个数据去比较,满足条件进行交换,不满足条件不交换
int[] arr={5,2,7,8,3};
第一轮: 索引为0位置作为主场 8,2,5,7,3
第二轮: 索引为1位置作为主场 7,2,5,3
第三轮: 索引为2位置作为主场 5,2,3
第四轮: 索引为3位置作为主场 3,2
一共有arr.length个数据,比较 arr.length-1轮 i :0~arr.length-2
选择排序代码
基本代码
public static int[] choice(int[] arr){
//外层循环i控制轮数,每一轮中作为主场数据的索引数
for(int i=0;i<arr.length-1;i++){
//与主场数据比较的所有数据的索引变化范围
for(int j=i+1;j<=arr.length-1;j++){
if(arr[i] < arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
return arr;
}
优化版本选择排序:
每一轮最多只交换一次,找到最小的或者最大的进行交换
声明一个中间变量,用来存储这一轮中找到的最大的|最小的值的索引
public static int[] choice2(int[] arr){
//外层循环i控制轮数,每一轮中作为主场数据的索引数
for(int i=0;i<arr.length-1;i++){
//与主场数据比较的所有数据的索引变化范围
int max=i; //假设每一轮作为主场数据都是最大的
for(int j=i+1;j<=arr.length-1;j++){
if(arr[max] < arr[j]){
max=j;
}
}
if(max!=i){
int temp=arr[i];
arr[i]=arr[max];
arr[max]=temp;
}
}
return arr;
}
4.数组过滤
例:将一个整型数组中的0去掉后但会一个新数组.
例如: int[] arr={1,26,0,8,10,50,8,0,7,35,0,4,3,20,0,17};
要求:将以上数组中的0去掉,将不为0的值存入一个新数组,生成新的数组作为返回值.
int newArr={1,26,8,10,50,8,7,35,4,3,20,17};
//返回值:返回数组int 参数:int[]
public static int[] filter(int[] arr){
int count=0; //计数器
//查找不为0数据的个数
for(int i:arr){
if(i!=0){
count++;
}
}
//判断是否存在0
if(count==arr.length){
return arr;
}
//构建新数组 ,根据指定长度
int[] newArr=new int[count];
//遍历原数组把数据方法新数组中
int index=0; //新数组的索引
for(int i=0;i<=arr.length-1;i++){
if(arr[i]!=0){
newArr[index]=arr[i];
index++;
}
}
return newArr;
}
5.获取数组最值
最值:获取数组中的最大值和最小值
public static void getMaxMin(int[] arr){
int max=arr[0]; //假设当前数据就是这个数组中的最大值,并且存储最大值
int min=arr[0]; //假设当前数据就是这个数组中的最小值
for(int i=0;i<=arr.length-1;i++){
if(max<arr[i]){
max=arr[i];
}
if(min>arr[i]){
min=arr[i];
}
}
System.out.println(max);
System.out.println(min);
}
二 可变参数
1.可变参数的个数可以没有也可以有多个,个数不定但是类型要求相同
2.数据类型 ... 参数名 ...代表可变参数,要写在数据类型和参数名之间
3.可变参数相当于在方法内部创建一个当前类型的数组,所以使用可变参数中的数据要使用数组的方法
4.可变参数写在参数列表的最后位置
三 Arrays 操作数组工具类
1.使用步骤
(1)导包
//导包
import java.util.Arrays;
(2)Arrays.方法名(参数);
//1.static String toString(int[] a) 返回指定数组内容的字符串表示形式。
System.out.println(Arrays.toString(arr));
//2.static boolean equals(int[] a, int[] a2) 如果两个指定的 int 型数组彼此相等,则返回 true。
//先比较长度,长度相同再比较内容
System.out.println(Arrays.equals(arr,arr2));
//3.static void sort(int[] a) 对指定的 int 型数组按数字升序进行排序。
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
//4.static int binarySearch(int[] a, int key) 二分法查找 如果它包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)
System.out.println(Arrays.binarySearch(arr,10)); //-6
String[] arr3={"因为","吴乐","王强","王涛","肖明"};
//5.static <T> String[] copyOf(T[] original, int newLength) 复制指定的数组,截取或用 null 填充(如有必要),以使副本具有指定的长度。
System.out.println(Arrays.toString(Arrays.copyOf(arr3,3)));
//6.static <T> String[] copyOfRange(T[] original, int from, int to) 将指定数组的指定范围复制到一个新数组。 to结束位置索引取不到
System.out.println(Arrays.toString(Arrays.copyOfRange(arr3,1,6)));
boolean[] arr4=new boolean[6];
System.out.println(Arrays.toString(arr4));
//7.static void fill(boolean[] a, boolean val) 将指定的 boolean 值分配给指定 boolean 型数组的每个元素。
//Arrays.fill(arr4,true);
//System.out.println(Arrays.toString(arr4));
//8.static void fill(boolean[] a, int fromIndex, int toIndex, boolean val) 将指定的 boolean 值分配给指定 boolean 型数组指定范围中的每个元素。
//toIndex结束位置索引取不到
Arrays.fill(arr4,1,3,true);
System.out.println(Arrays.toString(arr4));