天天看点

Java之数组及Arrays类

数组的声明 方法一: int a[]; ------------> 声明数组 a = new int[5]; ------------> 定义数组长度 方法二: 数组类型[] 数组名 = new 数据类型[大小] int b[] = new int[5]; 方法三:int c[] = {15,42,63,81,90} 数组的赋值 方法一: 边声明边赋值 (1)数组长度已经由数组内元素固定下来了,不能再添加,否则会出现索引越界。 int score[] = {89,65,73}; (2) new int[]中括号中不能添加数组长度,其长度由数组元素以确定,同上。 int score2[] = new int[]{89,65,73}; 方法二: 使用循环 Scanner scanner = new Scanner(System.in); int arr[] = new int[5]; System.out.println("请输入数字:"); int i; for(i = 0;i < arr.length;i++){ arr[i] = scanner.nextInt(); System.out.println(arr[i]); } 基本数据的传值与数组的传引用 基本数据传值 int i = 6; int j = i; i = 7; System.out.println(j); 其中,最后的结果为:j = 6,因为j = i是将i的值6传给了j,相当于已经对j赋了一个值为6;所以,不论后面i的值如何修改,j都不变。 引用数据类型 int zhangsan[] = {180,25}; int lisi[] = zhangsan; zhangsan[0] = 170; System.out.println(lisi[0]); 其中,最后的结果为lisi[0] = 170,因为int lisi[] = zhangsan是将zhangSan数组在栈中的数组索引值给了lisi,并未给他数组具体的数据,所以,当zhangSan数组在堆中的数据改变,而在栈中的索引值未变时时,lisi数组也会根据zhangSan数组的索引值找到改变后的zhangSan数组,所以,lisi[0] = 170。 数组遍历 遍历就是将数组中的数据用一定的方法自动的一个个的列举出来。 方法一:通过for循环 int arr[] = {12,35,68,95,32}; for ( int i = 0; i < arr.length; i++ ) { System.out.println(arr[i]); } 方法二:通过foreach循环 int arr[] = {12,35,68,95,32}; for( int i : arr ){ System.out.println(i); } 附加: 增强for循环 for in i为索引 for(var i in arr){ console.log(arr[i]); } for of i为数组值 for(var i of arr){ console.log(i); } foreach 在javascript中的表现方法 arr.foreach(function(value,index){ console.log(value); } foreach循环的另一种表现形式 for(元素类型t 元素变量x : 遍历对象obj){       引用了x的java语句;  }  Arrays类方法 Sort 方法: 无返回值void 对数组的元素进行升序排序, 默认升序排列, 不会返回一个新数组,即 对原数组改变排序 int arr[] = {56,42,89,65,24,98}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); 其结果为:[24,42,56,65,89,98] equals 方法: 有返回值boolean 比较两个数组是否相等,数组相等是指数组内元素的 大小 , 顺序 和 类型全部相等 int arr1[] = {10,20,30,40}; int arr2[] = {10,20,30,40}; int arr3[] = {20,10,30,40}; int arr4[] = {10,20,30,50}; System.out.println( Arrays.equals(arr1, arr2) ); System.out.println(Arrays.equals(arr1, arr3)); System.out.println(Arrays.equals(arr1, arr4)); 其结果为:true,false,false tostring 方法: 有返回值String 将数组转化成字符串的形式输出 int arr1[] = {10,20,30,40}; System.out.println( Arrays.toString (arr1)); 其结果为:[10,20,30,40] fill 方法: 无返回值void 用某一数值将原数组的值替换掉 int arr2[] = {10,20,30,40}; Arrays. fill(arr2,60) ; System.out.println(Arrays.toString(arr2)); 其结果为:[60,60,60,60] binarySearch (arr,要查找元素): 有返回值index 查找数组中要查找元素第一次出现的位子,返回其索引值, 注意,binarySearch只对升序的数组有效 int arr5[] = {10,45,50,20,90,45,32,30}; Arrays.toString(arr5); System.out.println( Arrays.binarySearch(arr5, 10) ); 其结果为:0 copyOf (array,length) 把原数组转换成一个长度为length的数组, 当长度不够时,自动补0;当长度较短时,则只取相应的前几位,不能从中间截取,必须从头开始截取。 int arr6[] = {52,63,89,75,21,38}; int arr7[] = Arrays.copyOf(arr6, 9 ); System.out.println(Arrays.toString(arr7)); int arr8[] = Arrays.copyOf(arr6, 3) ; System.out.println(Arrays.toString(arr8)); 其结果为:arr7 = [52, 63, 89, 75, 21, 38, 0, 0, 0] arr8 = [52, 63, 89] copyOfRange (arr,from,to) 随意从数组中复制一段数组 参数1:要复制的元素组 参数2:开始索引(包括) 参数3:结束索引(不包括) int arr6[] = {52,63,89,75,21,38}; int arr9[] = Arrays.copyOfRange(arr6, 1, 4) ; System.out.println(Arrays.toString(arr9)); int arr10[] = Arrays.copyOfRange(arr6, 1, arr6.length-1); System.out.println(Arrays.toString(arr10)); 其结果为: arr9 = [63, 89, 75] arr10 = [63, 89, 75, 21]