Java基础-Day07
数组中涉及到的常见算法
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
package com.lurenj.java;
/**
* java.util.Arrays:操作数组的工具类,里面定义了很多操作数组的方法
*
*/
import java.util.Arrays;
public class ArraysTest {
public static void main(String[] args) {
//1.boolean equals(int[] a,int[] b):判断两个数组是否相等
int[] arr1 = new int[]{1,2,3,4};
int[] arr2 = new int[]{1,3,2,4};
boolean isEquals = Arrays.equals(arr1,arr2);
System.out.println(isEquals);
//2.String toString(int[] a):输出数组元素
System.out.println(Arrays.toString(arr1));
//3.void fill(int[] a,int val):替换数组元素
Arrays.fill(arr1,10);
System.out.println(Arrays.toString(arr1));
//4.void sort(int[] a):排序,默认从小到大
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
//5.int binarySearch(int[] a,int key):找数组中相关索引
int[] arr3 = new int[]{1,2,3,5};
int index = Arrays.binarySearch(arr3,5);
if (index >= 0){
System.out.println(index);
}else {
System.out.println("未找到!");
}
}
}
package com.lurenj.java;
/*
* 数组的冒泡排序
*
* */
public class BubbleSortTest {
public static void main(String[] args) {
int[] arr = new int[]{43,32,78,-91,11,0,11,64,32,-21,99};
//冒泡排序,从小到大
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}
package com.lurenj.java;
/*
* 算法的考察:数组的复制、反转、查找(线性查找、二分法查找)
* */
public class ArrayTest3 {
public static void main(String[] args) {
String[] arr = new String[]{"AA","DD","CC","BB","MM"};
//数组的复制(区别于数组变量的赋值,arr = arr1)
String[] arr1 = new String[arr.length];
System.out.println("arr:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
System.out.println("arr1复制:");
for (int i = 0; i < arr1.length; i++) {
arr1[i] = arr[i];
}
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
System.out.println("arr反转:");
//数值反转
//方法一:
// for (int i = 0; i < arr.length / 2 ; i++) {
// String temp = arr[i];
// arr[i] = arr[arr.length - i -1];
// arr[arr.length - i -1] = temp;
// }
//方法二:
for (int i = 0,j = arr.length - 1;i < j;i++,j--){
String temp = arr[i];
arr[i] = arr[arr.length - i -1];
arr[arr.length - i -1] = temp;
}
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr[i] + "\t");
}
//查找(或搜索)
//线性查找
System.out.println();
String dest = "BB";
boolean isFlag = true;
for (int i = 0; i < arr.length; i++) {
if(dest.equals(arr[i])){//比的是内容是否相等
System.out.println("找到了指定的元素,位置为:" + i);
isFlag = false;
break;
}
}
if (isFlag){
System.out.println("很遗憾,没有找到!");
}
//二分法查找:特点->比较快
//前提:所要查找的数组必须有序。
int[] arr2 = new int[]{-96,-35,45,77,78,111,233,456};
int dest1 = -32;
int head = 0;//初始的首索引
int end = arr2.length - 1;//初始的末索引
boolean isFlag1 = true;
while (head <= end){
int middle = (head + end)/2;
if (dest1 == arr2[middle]){
System.out.println("找到了指定的元素,位置为:" +
middle);
isFlag1 = false;
break;
} else if (arr2[middle] > dest1) {
end = middle - 1;
}else {
head = middle + 1;
}
}
if (isFlag1){
System.out.println("很遗憾,没有找到!");
}
}
}
- 数组中的常见异常
- 数组角标越界的异常:ArrayIndexOutOfBoundsException
- 当角标在范围之外,则报错,且报错行以下不再执行
- 空指针异常(多见):NullPointerException
package com.lurenj.java;
/*
*
* 数组中的常见异常
* 1.数组角标越界的异常:ArrayIndexOutOfBoundsException
* 当角标在范围之外,则报错,且报错行以下不再执行
*
* 2.空指针异常(多见):NullPointerException
*
* */
public class ArrayExceptionTest {
public static void main(String[] args) {
//数组角标越界的异常:ArrayIndexOutOfBoundsException
int[] arr = new int[]{1,2,3,4,5};
//越界1:右越界 当arr[i] i=5时,报错,实际角标为0~4
// for (int i = 0; i <= arr.length; i++) {
// System.out.println(arr[i]);
// }
//越界2:左越界,角标范围为0-4,报错,角标越界
//System.out.println(arr[-2]);
// 2.空指针异常(多见):NullPointerException
//情况1:
// int[] arr1 = new int[]{1,2,3};
// arr1 = null;//相当于把arr1地址擦掉了,再次去找相当于空指针了
// System.out.println(arr1[0]);
//情况2:
// int[][] arr2 = new int[4][];
// System.out.println(arr2[0][0]);//空指针异常
//情况3:
String[] arr3 = new String[]{"AA","BB","CC"};
arr3[0] = null;
System.out.println(arr3[0].toString());//空指针异常
}
}