可变参数 二维数组 Arrays工具类

关键知识点和补充

  • 二维数组其实还是以一维数组的方式存储的,只是第一维存放的是第二维的首地址,第二维存放的是真实的数组内容.
  • 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
	 }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值