数组、Arrays类

一、一维数组

数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致。

1.数组的定义

方式一:

数据类型[]  数组名 = new  数据类型[长度];

public class Test_array {
	public static void main(String[] args) {
		//1.定义数据类型为int的数组
		int[] arr = new int[3];//定义了一个有3个数据的int数组
		//动态初始化
		arr[0] = 1;
		arr[1] = 5;
		arr[2] = 9;
		System.out.println(arr[0]);//0
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println(arr.length);//3,arr数组的长度
	}
}

方式二:

数据类型[]  数组名 = new  数据类型[]{元素1,元素2,元素3…};

public class Test_array {
	public static void main(String[] args) {
		String[] arr1 = new String[]{"你好","我好","大家好","你真漂亮"};
		System.out.println("arr1的长度是:"+arr1.length);
		System.out.println(arr1[0]);
		System.out.println(arr1[1]);
		System.out.println(arr1[2]);
	}
}

方式三:

数据类型[]  数组名 = {元素1,元素2,元素3…};

public class Test_array {
	public static void main(String[] args) {
		char[] arr2 = {'a','b','中','国'};
		System.out.println("arr2的长度是:"+arr2.length);
		arr2[0] = '人';
		System.out.println(arr2[0]);
		System.out.println(arr2[1]);
		System.out.println(arr2[2]);
	}
}

2.数组遍历

1)普通的for循环

public class Test_array {
	public static void main(String[] args) {
		double[] arr = {1.0,1.2,2.5,3.2};
		for(int i=0;i<arr.length;i++){
			arr[i] += 1.0; 
			System.out.println(arr[i]);
		}
		System.out.println("************倒着输出");
		for(int i=arr.length-1;i>=0;i--){
			System.out.println(arr[i]);
		}
	}
}

2)增强for循环

public class Test_array {
	public static void main(String[] args) {
		double[] arr = {1.0,1.2,2.5,3.2};
		//for(数据类型  变量名:要遍历的对象) 这里的变量名不再是索引,而是数组的直接的内容
		for(double i:arr){
			i += 1.0;
			System.out.println(i);
		}
	}
}

3.数组常见异常

1)空指针异常

public class Test_array_exception {
	public static void main(String[] args) {
		int[] arr = new int[4];
		arr = null;
        System.out.println(arr[0]);//1.java.lang.NullPointerException
	}
}

在这里插入图片描述

2)数组长度为负数

public class Test_array_exception {
	public static void main(String[] args) {
		int[] arr = new int[4];
	    arr = new int[-1];//java.lang.NegativeArraySizeException	
	}
}

在这里插入图片描述

3)数组越界异常

public class Test_array_exception {
	public static void main(String[] args) {
		int[] arr = new int[4];
        System.out.println(arr[4]);//java.lang.ArrayIndexOutOfBoundsException
	}
}

在这里插入图片描述

4.数组作为方法参数和返回值

定义一个可以把数组正序打印的的方法(返回值类型 int[] or void,是否需要参数int[] arr)

顺序输出:

public static void print(int[] arr) {
		for(int i=0; i<arr.length; i++) {
			System.out.println(arr[i]);
		}
	}

倒序输出:

public static int[] dprint(int[] arr) {
		for(int i=arr.length-1; i>=0; i--) {
			System.out.println(arr[i]);
		}
		return arr;
	}

二、二维数组

二维数组:数组中的数据又是一个数组

1.二维数组的定义

方式一:

数据类型[][]  二维数组名 = new 数据类型[一维长度][二维长度];

public class Array {
	public static void main(String[] args) {
		//动态定义1
		int[][] arr = new int[2][3];
		//赋值
		arr[0][0] = 1;
		arr[0][1] = 2;
		arr[1][0] = 3;
		arr[1][2] = 4;
		
		System.out.println(arr[0][0]);
		System.out.println(arr[0][1]);
		System.out.println(arr[1][0]);
		System.out.println(arr[1][1]);//默认值
	}
}

方式二:

数据类型[][]  二维数组名 = new 数据类型[一维长度] [];

注意:
一维必须给值
二维长度可以定义

public class Array {
	public static void main(String[] args) {
		//动态初始化2
		char[][] arr1 = new char[3][];
		arr1[0] = new char[1];
		arr1[1] = new char[2];
		arr1[2] = new char[]{'z','s'};
	}
}

方式三:

数据类型[][]  二维数组名 = new 数据类型[][]{{1,2,3},{5,4,6}…};

public class Array {
	public static void main(String[] args) {
		//静态初始化1
		double[][] arr2 = new double[][]{{1.1,2.2},{0.5,3.6}};
		System.out.println(arr2[1][0]);
	}
}

方式四:

数据类型[][]   二维数组名 = {{1,2,3},{5,4,6}…};

public class Array {
	public static void main(String[] args) {
		//静态初始化2
		String[][] arr3 = {{"好好","学习"},{"理想","科学家"}};
		System.out.println(arr3[0][1]);
	}
}

2.二维数组的遍历

双重循环(普通for,增强for) 随意嵌套使用

public class Array {
	public static void main(String[] args) {
		int[][] arr = {{1,2,3},{7,5},{9}};
		System.out.println("普通for里面嵌套增强for");
		for(int i=0;i<arr.length;i++){//i表示外层数组的索引
			//增强for循环,确定需要遍历的对象,遍历对象里数据的类型
			for(int j:arr[i]){//增强for循环中,j代表的是内层数组中的数据
				System.out.println(j);
			}
		}
		System.out.println("增强for里面嵌套增强for");
		for(int[] a:arr){
			for(int i:a){
				System.out.println(i);
			}
		}
	}
}

三、Arrays类

操作数组的一个工具类,封装了很多常用来操作数组的方法

1.toString()方法

把数组中的内容用字符串的形式返回。

public class ArraysDemo {
	public static void main(String[] args) {
		int[] arr = new int[]{2,3,1,6,5,8};
		//toString() 把数组中的内容用字符串的形式返回,
		System.out.println(arr);//[I@15db9742 (对象,后面的是当前对象所在内存的地址)
		System.out.println(Arrays.toString(arr));//[2, 3, 1, 6, 5, 8]
	}
}

2.equals()方法

比较两个数组的内容是否相等。

public class ArraysDemo {
	public static void main(String[] args) {
		int[] arr = new int[]{2,3,1,6,5,8};
		int[] arr1 = new int[]{2,3,1,6,5,8};
		//equals() 比较两个数组的内容是否相等
		System.out.println(arr==arr1);//false (比较的是地址,自然不相同)
		System.out.println(Arrays.equals(arr, arr1));//true,这里比较的是内容
	}
}

3.针对多维数组使用

public class ArraysDemo {
	public static void main(String[] args) {
		double[][] arr3 = {{1.5,2.5,3.4},{3}};
		double[][] arr4 = {{1.5,2.5,3.4},{3}};
		/*
		 * 针对多维数组使用
		 * 	deepEquals()
		 * 	deepToString() 
		 */
		System.out.println(Arrays.toString(arr3));//I@15db9742
		System.out.println(Arrays.deepToString(arr3));
		System.out.println(Arrays.deepEquals(arr3, arr4));//true
	}
}

4.fill方法

public class ArraysDemo {
	public static void main(String[] args) {
		int[] arr = new int[]{2,3,1,6,5,8};
		/*
		 *  static void fill(int[],int val)
		 * 	将指定的int值分配给指定的int型数组的每个元素
		 * 
		 *  static void fill(int[],int fromIndex,int toIndex,int val)
		 * 	将指定的值分配到指定的数组的指定范围(前闭后开)
		 */
		Arrays.fill(arr, -1);
		System.out.println(Arrays.toString(arr));
		Arrays.fill(arr, 1,3,100);
		System.out.println(Arrays.toString(arr));
	}
}

5.sort排序

public class ArraysDemo {
	public static void main(String[] args) {
		int[] arr1 = new int[]{2,3,1,6,5,8};
		/*
		 *  static void sort(int[] a)
		 * 	对指定的数组进行排序(数字的升序)
		 */
		Arrays.sort(arr1);//排序了
		System.out.println(Arrays.toString(arr1));
	}
}

6.二分查找法

public class ArraysDemo {
	public static void main(String[] args) {
		int[] arr1 = new int[]{2,3,1,6,5,8};
		int[] arr5 = new int[]{2,3,1,6,5,8};
		/*
		 *  二分查找法
		 *  binarySearch(int[] arr,int value) 
		 * 	使用二分查找法,首先需要保证数组是有序的。
		 */
		//如果值为负数,代表没有找到这个指定数。返回的数字是-(应该在数组中的索引+1)
		System.out.println(Arrays.binarySearch(arr1, 3));
		System.out.println(Arrays.binarySearch(arr5, 9));
	}
}

7.数组拷贝

1.Arrays. copyOf(源数组,长度)

public class ArrayTest01 {
    public static void main(String[] args) {
        int[] arr = {1,5,3,8,2,10,16,14,19};
        //从arr数组中复制前3个元素到arr2数组中
        //重新又开辟了一个数组
        int[] arr2 = Arrays.copyOf(arr, 3);
        System.out.println(Arrays.toString(arr2));
    }
}

2.System.arraycopy(源数组,源起始索引,目标数组,目标起始索引,长度)

 /**
         * src - 源数组。
         * srcPos - 源数组中的起始位置。
         * dest - 目标数组。
         * destPos - 目标地数据中的起始位置。
         * length - 要复制的数组元素的数量。
         */
        int[] arr3 = new int[3];
        System.arraycopy(arr,5,arr3,0,3);
        System.out.println(Arrays.toString(arr2));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值