关键知识点和补充
- 二维数组其实还是以一维数组的方式存储的,只是第一维存放的是第二维的首地址,第二维存放的是真实的数组内容.
- Arrays.toString(arr)重写了Object的toString方法,本来应该是返回的地址,用工具类后返回的是内容 ,如果用这个来输入一个二维数组的数组名,会显示每个第二维数组的地址,可以用deepToString(arr)来访问二维数组的内容.
- 注意!Arrays.toString()的返回是個字符串,但是其實是憑藉出来的,不是真的,不要被蒙蔽了!!
- Arrays.equals(arr1,arr2) 同toString一样的意思,值相同返回true,不同为false,同理Arrays.deepEquals(arr1,arr2)
- 一般涉及到的from to 都是左闭右开
- Arrays.copyOf(arr,length) Arrays.copyOfRange(arr,int from,int to) 够长度截取或着不够长度补充,返回值是一个新的数组
- Arrays.fill(Object arr,object value) Arrays.fill(Object arr,int fromindex,int toindex,object value)将arr 中的内容都变成value
- Arrays.sort(arr) Arrays.sort(arr,int fromindex, int toindex) 可以排字符串!!
- Arrays.binarySearch(int[] a, int key) 二分查找必须是升序或着降序的 ,如果找不到就会返回一个负数((-插入点 )-1) 返回值是一个数组的类型
可变参数
*可变参数: 方法的参数数据类型一致,参数个数不确定,0个或多个
*1.数据类型 ... 参数名 可变参数
*2.自动在方法内部为可变参数构建数组,存储0~多个数据
*3.如果参数列表中存在多个 参数,可变参数一定要放在参数列表的最后位置
public static void main(String[] args) {
getSum(1,2,3,4,5,6);
}
static void getSum(int num,int ...i){ //可变参数 参数可以是0~多个,但是都是int类型
int sum=0;
for(int j=0;j<=i.length-1;j++){
sum+=i[j];
}
System.out.println(sum);
System.out.println(num);
System.out.println(Arrays.toString(i));
}
}
运行结果:
20
1
[2, 3, 4, 5, 6]
二维数组
* 数组中还是数组
*
* 数组的声明
* --推荐
* 数据类型 数组名[][];
* 数据类型[] 数组名[];
*
* 数组的初始化
* 动态初始化:先创建后赋值
* 数据类型[][] 数组名 = new 数据类型[一维的长度][二维的长度];
* 数据类型[][] 数组名 = new 数据类型[一维的长度][];
* 其中内层数组可以使用一维数组的常见方式
*
* 静态初始化:创建的同时赋值
* 数据类型[][] 数组名 = new 数据类型[][]{{1,2,3},{1,2},{1},{2,2}...};
* 数据类型[][] 数组名 = {{1,2,3},{1,2},{1},{2,2}...};
* 第一次创键并且赋值可以使用简易写法
* 遍历:
* 双重循环嵌套
*
* 操作二维数组中的数据:
* 数组名[一维索引][二维索引]
Arrays工具类
import java.util.Arrays;
/*
* Arrays用来操作数组的工具类,是一个静态工厂
*/
public class ArraysDemo04 {
public static void main(String[] args) {
String[] arr={"hehe","haha","houhou","heihei"};
String[] arr3={"hehe","haha","houhou","heihei"};
int[][] arr2={{123,234},{12,23,34},{0}};
int[][] arr4={{123,234},{12,23,34},{0}};
//static String toString(Object[] a) 返回指定数组内容的字符串表示形式
System.out.println(Arrays.toString(arr));
//[[I@15db9742, [I@6d06d69c, [I@7852e922]
System.out.println(Arrays.toString(arr2));
//static String deepToString(Object[] a) 返回指定数组“深层内容”的字符串表示形式。
System.out.println(Arrays.deepToString(arr2));
//static boolean equals(Object[] a, Object[] a2) 如果两个指定的 Objects 数组彼此相等,则返回 true。
System.out.println(arr==arr3);
System.out.println(Arrays.equals(arr, arr3));
//static boolean deepEquals(Object[] a1, Object[] a2)如果两个指定数组彼此是深层相等 的,则返回 true。
System.out.println(Arrays.deepEquals(arr2, arr4));
System.out.println(Arrays.equals(arr2, arr4));
System.out.println(arr2== arr4);
/*
* static <T> T[] copyOf(T[] original, int newLength) 截取或者填充
* 从索引为0的位置开始
* 参数:
* original 原数组
* newLength 新数组的长度
* 返回值: 新数组
*/
System.out.println("原数组:"+Arrays.toString(arr));
System.out.println(Arrays.toString(Arrays.copyOf(arr, 3))); //截取
System.out.println(Arrays.toString(Arrays.copyOf(arr, 10))); //截取
/*
* static <T> T[] copyOfRange(T[] original, int from, int to) 将指定数组的指定范围复制到一个新数组。
* original原数组
* from 起始索引
* to 结束索引 (结束索引一般不包含)
*/
System.out.println("原数组:"+Arrays.toString(arr));
System.out.println(Arrays.toString(Arrays.copyOfRange(arr, 1,3)));
/*
* static void fill(Object[] a, Object val) 将指定的 Object 引用分配给指定 Object 数组的每个元素。
*/
System.out.println("原数组:"+Arrays.toString(arr3));
Arrays.fill(arr3, "哈哈");
System.out.println("填充后:"+Arrays.toString(arr3));
/*
* static void fill(Object[] a, int fromIndex, int toIndex, Object val) 将指定的 Object 引用分配给指定 Object 数组指定范围中的每个元素。
*/
System.out.println("原数组:"+Arrays.toString(arr3));
Arrays.fill(arr3,1,2, "呵呵"); //结束索引没有包含
System.out.println("填充后:"+Arrays.toString(arr3));
/*
* static void sort(char[] a)
对指定的 char 型数组按数字升序进行排序。
static void sort(char[] a, int fromIndex, int toIndex)
对指定 char 型数组的指定范围按数字升序进行排序。
*/
int[] arrs={3,1,7,4,6,2};
System.out.println("原数组:"+Arrays.toString(arrs));
Arrays.sort(arrs);
System.out.println("原数组:"+Arrays.toString(arrs));
char[] ch={'c','b','a','d'};
System.out.println("原数组:"+Arrays.toString(ch));
Arrays.sort(ch);
System.out.println("原数组:"+Arrays.toString(ch));
System.out.println("原数组:"+Arrays.toString(arr));
Arrays.sort(arr);
System.out.println("原数组:"+Arrays.toString(arr));
/*前提 要求: 先升序排序才可以
* static int binarySearch(int[] a, int key)
使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。
*/
System.out.println("原数组:"+Arrays.toString(arrs));
System.out.println("原数组:"+Arrays.binarySearch(arrs,-1)); //(-插入点 )-1
}
}