【算法】算法常用工具类总结:ArrayUtil

> 说明

  JDK 提供了一个工具类专门用来操作数组的工具类,即 Arrays,该 Arrays 工具类提供了大量的静态方法,在实际项目开发中,推荐使用,这样既快捷又不会发生错误。但在面试时,若出现对数组操作的题目,就决不允许使用 Arrays 类提供的方法,因为面试官考察的是我们对数组的操作能力,而不是对 Arrays 类的应用

  ① 定义在java.util包下。
  ② Arrays:提供了很多操作数组的方法。

> API

  		 //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[]{-98,-34,2,34,54,66,79,105,210,333};
		int index = Arrays.binarySearch(arr3, 210);
		if(index >= 0){
			System.out.println(index);
		}else{
			System.out.println("未找到");
		}

> 手写数组的工具类:ArrayUtil

/**
 * @Description 自定义的操作数组的工具类
 * @version
 * @date 2020年2月25日上午9:35:15
 */
public class ArrayUtil {

	/**
	 * 
	 * @Description 求int型数组的最大值
	 * @date 2020年2月25日上午9:36:44
	 * @param arr
	 * @return
	 */
	public int max(int[] arr) {
		int maxValue = arr[0];
		for(int i = 1;i < arr.length;i++){
			if(maxValue < arr[i]){
				maxValue = arr[i];
			}
		}
		return maxValue;
	}

	/**
	 * 
	 * @Description 求int型数组的最小值
	 * @date 2020年2月25日上午9:37:01
	 * @param arr
	 * @return
	 */
	public int min(int[] arr){
		int minValue = arr[0];
		for(int i = 1;i < arr.length;i++){
			if(minValue > arr[i]){
				minValue = arr[i];
			}
		}
		return minValue;
	}

	/**
	 * 
	 * @Description 求int型数组的总和
	 * @date 2020年2月25日上午9:37:33
	 * @param arr
	 * @return
	 */
	public int sum(int[] arr) {
		int sum = 0;
		for(int i = 0;i < arr.length;i++){
			sum += arr[i];
		}
		return sum;
	}

	/**
	 * 
	 * @Description 求int型数组的元素的平均值
	 * @date 2020年2月25日上午9:37:47
	 * @param arr
	 * @return
	 */
	public int avg(int[] arr) {
		int sumValue = sum(arr);
		return sumValue / arr.length;
	}

	// 创建一系列重载的上述方法
	// public double max(double[] arr){}
	// public float max(float[] arr){}
	// public byte max(byte[] arr){}

	/**
	 * 
	 * @Description 遍历数组
	 * @date 2020年2月25日上午9:41:23
	 * @param arr
	 */
	public void print(int[] arr) {
		for(int i = 0;i < arr.length;i++){
			System.out.print(arr[i] + "  ");
		}
		System.out.println();
	}

	/**
	 * 
	 * @Description 复制数组arr
	 * @date 2020年2月25日上午9:41:39
	 * @param arr
	 * @return
	 */
	public int[] copy(int[] arr) {
		int[] arr1 = new int[arr.length];
		for(int i = 0;i < arr.length;i++){
			arr1[i] = arr[i];
		}
		return arr1;
	}

	/**
	 * 
	 * @Description 反转数组
	 * @date 2020年2月25日上午9:41:50
	 * @param arr
	 */
	public void reverse(int[] arr) {
		for(int i = 0,j = arr.length - 1;i < j;i++,j--){
			int temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
		}
	}

	/**
	 * 
	 * @Description 数组的排序
	 * @date 2020年2月25日上午9:43:28
	 * @param arr
	 * @param desc 指明排序的方式。 ascend:升序    descend:降序
	 */
	public void sort(int[] arr,String desc) {
		如果desc输入的是null,null.equls 会直接报空指针 更好 
		if("ascend".equals(desc)){//if(desc.equals("ascend")){
			for (int i = 0; i < arr.length - 1; i++) {
				for (int j = 0; j < arr.length - 1 - i; j++) {
					if (arr[j] > arr[j + 1]) {
//						int temp = arr[j];
//						arr[j] = arr[j + 1];
//						arr[j + 1] = temp;
						
						swap(arr,j,j+1);
//						错误的:这样只是在栈里复制变量然后一顿操作
//						swap(arr[j],arr[j + 1]);
					}
				}
			}
		}else if ("descend".equals(desc)){
			for (int i = 0; i < arr.length - 1; i++) {
				for (int j = 0; j < arr.length - 1 - i; j++) {
					if (arr[j] < arr[j + 1]) {
//						int temp = arr[j];
//						arr[j] = arr[j + 1];
//						arr[j + 1] = temp;
						
						swap(arr,j,j+1);
						//错误的:
//						swap(arr[j],arr[j + 1]);
					}
				}
			}
		}else{
			System.out.println("您输入的排序方式有误!");
		}
	}
	
	public void swap(int[] arr,int i,int j){
		int temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}
	
	public void swap(int i,int j){
		int temp = i;
		i = j;
		j = temp;
	}
	

	/**
	 * 
	 * @Description 查找指定的value值在arr数组中出现的位置
	 * @date 2020年2月25日上午9:40:20
	 * @param arr
	 * @param value
	 * @return 返回value值出现的位置 或 -1:未找到
	 */
	public int getValue(int[] arr, int value) {
		//方法:线性查找
		for(int i = 0;i < arr.length;i++){
			if(value == arr[i]){
				return i;
			}
		}
		
		return - 1;
	}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值