本文最后更新于:December 5, 2021 pm
JAVA基础知识复习(四),数组复习。
目录 1.声明数组变量
1.声明创建数组
int [] a=new int [10 ]; int aa[]=new int [10 ]; int [] b={2 ,5 ,14 ,5 ,3 };
2.加强for(For-Each循环) JDK 1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。
for (type element: array){ System.out.println(element); } 如:int [] a={12 ,51 ,6 ,6 ,1 };for (int t:a){ System.out.println(t); }12 51 6 6 1
3.数组作为函数的参数 数组可以作为参数传递给方法。例如:
public static void printArray (int [] array) { for (int i = 0 ; i < array.length; i++) { System.out.print(array[i] + " " ); } } printArray(new int []{3 , 1 , 2 , 6 , 4 , 2 });
4.函数作为函数的返回值
public static int [] reverse(int [] list) { int [] result = new int [list.length]; for (int i = 0 , j = result.length - 1 ; i < list.length; i++, j--) { result[j] = list[i]; } return result; }
2.多维数组 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。
一.直接为一维分配空间
二.分别为一维分配空间
String s[][] = new String[2 ][]; s[0 ] = new String[2 ]; s[1 ] = new String[3 ]; s[0 ][0 ] = new String("Good" ); s[0 ][1 ] = new String("Luck" ); s[1 ][0 ] = new String("to" ); s[1 ][1 ] = new String("you" ); s[1 ][2 ] = new String("!" );
3.Arrays 类 java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。 具有一下功能:
1.给数组赋值:通过 fill 方法。 2.对数组排序:通过 sort 方法,按升序。sort只提供升序排序,并不支持降序排序。但可以倒序输出即可。如果一定要用 sort 实现降序排序,可以参考《java知识拓展》博文。 3.比较数组:通过 equals 方法比较数组中元素值是否相等。 4.查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
Java中Arrays类的常用方法
1.Arrays类位于 java.util 包中,主要包含了操作数组的各种方法。
2.Arrays.fill(); //填充数组
int [] arr = new int [5 ]; Arrays.fill(arr,4 ); String str = Arrays.toString(arr); System.out.print(str); int [] arr = new int [5 ]; Arrays.fill(arr,2 ,4 ,6 ); String str = Arrays.toString(arr); System.out.print(str);
3.Arrays.sort(); //数组排序
Arrays类有一个静态方法sort,利用这个方法可传入要排序的数组进去排序,因为传入的是一个数组的引用,所以排序完成的结果也通过这个引用来更改数组。
1.数字排序
int [] intArray = new int [] { 4 , 1 , 3 , -23 }; Arrays.sort(intArray);
2.字符串排序,先大写后小写 因为大写字母的ASCII码比小写字母的小。
String[] strArray = new String[] { “z”, “a”, “C” }; Arrays.sort(strArray);
3.严格按字母表顺序排序,也就是忽略大小写排序
String[] strArray = new String[] { “z”, “a”, “C” }; Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
4.反向排序 在数字数组中可以实现降序排序。大写字母的ASCII码比小写字母的小。需要导包 import java.util.Collections; 或者使用import java.util.*;。
String[] strArray = new String[] { “z”, “a”, “C” }; Arrays.sort(strArray, Collections.reverseOrder());
5.忽略大小写反向排序 可以理解成把所有的字母转换成对应小写字母或大写字母。转换成一种进行比较。 但是,当数组中有一个大写字母C和一个小写字母c时,大写字母C会在小写字母c前面,其他同理。
String[] strArray = new String[] { “z”, “a”, “C” }; Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER); Collections.reverse(Arrays.asList(strArray));
6.选择数组指定位置进行排序
int [] arr = {3 ,2 ,1 ,5 ,4 }; Arrays.sort(arr,0 ,3 ); String str = Arrays.toString(arr); System.out.print(str);
4.Arrays.toString(); //将数组中的内容全部打印出来
int [] arr = {3 ,2 ,1 ,5 ,4 }; System.out.print(arr); String str = Arrays.toString(arr);
5.Arrays.equals(); //比较数组元素是否相等
int [] arr1 = {1 ,2 ,3 };int [] arr2 = {1 ,2 ,3 }; System.out.println(Arrays.equals(arr1,arr2));
6.Arrays.binarySearch(); //二分查找法找指定元素的索引值(下标)
数组一定是排好序的,否则会出错。找到元素,只会返回最后一个位置。
int [] arr = {10 ,20 ,30 ,40 ,50 }; System.out.println(Arrays.binarySearch(arr, 30 ));
int [] arr = {10 ,20 ,30 ,40 ,50 }; System.out.println(Arrays.binarySearch(arr, 36 ));
int []arr = {10 ,20 ,30 ,40 ,50 }; System.out.println(Arrays.binarySearch(arr, 0 ,3 ,30 ));
int []arr = {10 ,20 ,30 ,40 ,50 }; System.out.println(Arrays.binarySearch(arr, 0 ,3 ,40 ));
7.Arrays.copeOf() 和Arrays.copeOfRange(); //截取数组
int [] arr = {10 ,20 ,30 ,40 ,50 };int [] arr1 = Arrays.copyOf(arr, 3 ); String str = Arrays.toString(arr1); System.out.print(str);
int []arr = {10 ,20 ,30 ,40 ,50 };int []arr1 = Arrays.copyOfRange(arr,1 ,3 ); String str = Arrays.toString(arr1); System.out.print(str);
4.数组容量扩充 数组容量如果不够用可以使用 Arrays.copyOf() 进行扩容。
Array.copy(E[] e,newLength);
其中第一个形参指的是需要扩容的数组,后面是扩容后的大小。其内部实现其实是使用了 System.arrayCopy(); 在内部重新创建一个长度为 newLength 类型是 E 的数组。 例如:
import java.util.Arrays; public class Main { public static void main (String[] args) { int [] a= {10 ,20 ,30 ,40 ,50 }; a= Arrays.copyOf(a,a.length+1 ); for (int i=0 ;i<a.length;i++) { System.out.println(a[i]); } } }10 20 30 40 50 0
5.数组中的常见异常 5.1数组下标越界(ArrayIndexOutOfBoundsException) 错误代码:
int [] arr = new int []{1 ,2 ,3 ,4 ,5 };for (int i=0 ;i<=arr.length;++i){ System.out.println(arr[i]); } System.out.println(arr[-2 ]); System.out.println(arr[-2 ]); System.out.println("hello world!" );
5.2空指针异常(NullPointerException) 错误代码一:
int [] arr = new int []{1 ,2 ,3 }; arr = null ; System.out.println(arr[0 ]);
错误代码二:
int [][] arr = new int [4 ][]; System.out.println(arr[0 ]); System.out.println(arr[0 ][0 ]);
错误代码三:
String[] arr = new String[]{"AA" ,"BB" ,"CC" }; System.out.println(arr[0 ].toString()); arr[0 ] = null ; System.out.println(arr[0 ].toString());