Java基础——数组

一、一维数组

  1. 声明与初始化
    (1)静态初始化:数组的初始化和数组元素的赋值同时进行
		int[] arr1;//声明
		arr1 = new int[] {1,2,3,4};//赋值
		//合并声明和初始化
		int[] arr2 = new int[] {4,5,6,7};
		//或 int arr2[] = new int[]{4,5,6,7}
		//或 int[] arr2 = {4,5,6,7}//类型推断

(2)动态初始化:数组的初始化和数组元素的赋值分开进行

String[] arr3 = new String[3];
  1. 引用一维数组元素
    通过角标,角标从0开始到数组长度-1结束
System.out.println(arr1[1]);
  1. 数组的属性:使用length属性调用
System.out.println(arr3.length);
  1. 一维数组的遍历
for(int i = 0;i < arr.length;i++){
	System.out.println(arr[i]);
}
  1. 一维数组的默认初始化值
    整型:0
    浮点型:0.0
    字符型:’\u0000’
    布尔型:false
    引用数据类型:null,不等同于’null’
    此时的规范与后面类的属性默认初始化值一致
  2. 一维数组的内存解析
    数组的内存解析
    二、二维数组
  3. 声明和初始化
    (1)动态初始化
//方式一
int[][] arr1 = new int[4][3];
//或
int[] arr1[] = new int[4][3];
int arr1[][] = new int[4][3];
//方式二
int[][] arr2 = new int[3][];
arr2[0] = new int[3];
arr2[1] = new int[2];
arr2[2] = new int[1];

(2)静态初始化

int[][] arr3 = new int[][]{1,2,3,4};
  1. 引用二维数组
    通过角标的方式:角标从0开始到数组的长度-1结束
System.out.println(arr3[0][2]);
  1. 二维数组的属性
System.out.println(arr3.length);
System.out.println(arr3[i].length);
  1. 遍历二维数组
for (int i = 0;i < arr3.length;i++){
	for (int j = 0;j < arr3[i].length;j++){
		System.out.println(arr3[i][j]);
	}
}
  1. 二维数组元素的默认初始化值
    以动态初始化方式来解释
    二维数组的外层元素默认初始化值为:地址值或null
    二维数组内层元素的初始化值:若外层元素默认初始化值为地址值,则内层元素的默认初始化值同一维数组;若外层元素的默认初始化值为null,则内层元素不存在,若试图去调用会出现报错(NullPointerException)
  2. 二维数组的地址解析
    二维数组的内存解析三、数组的常见算法
  3. 数组的赋值与复制
int[] arr1,arr2;
arr1 = new int[]{2,3,5,7,11,13};
//1.赋值:类似于创建一个快捷方式
arr2 = arr1;
for (int i = 0;i < arr1.length;i++){
	System.out.print(arr1[i] + '\t');
}
//修改arr2中偶索引位置上的元素
for (int i = 0;i < arr2.length;i++){
	if (i % 2 == 0){
		arr2[i] = i;
	}
	System.out.print(arr1[i] + '\t');
	System.out.println();
	System.out.print(arr2[i] + '\t');
}
//复制
arr2 = new int[arr1.length];
for (int i = 0;i < arr1.length;i++){
	arr2[i] = arr1[i];
}
System.out.println(arr1 + '\t');//地址值
System.out.println(arr2 + '\t');//地址值
	for (int i = 0;i < arr2.length;i++) {
			if(i % 2 == 0) {
				arr2[i] = i;
			}
			
		}
		for (int i = 0;i < arr1.length;i++) {
			System.out.print(arr1[i] + "\t");//0 3 2 7 4 13
		}
  1. 数组的反转
String[] arr3 = new String[]{"晴天","阴天","多云","下雨","下雪"};
//方式一:
for (int start = 0,int end = arr3.length;start < end;start++,end--){
	String temp = arr3[start];
	arr3[start] = arr3[end];
	arr3[end] = temp;
}
//方式二:
for (int i = 0;i < arr3.length / 2;i++){
	String temp = aarr3[i];
	arr3[i] = arr3[length - 1 -i];
	arr3[length - 1 -i] = temp;
}
  1. 数组中指定元素的查找
//1.线性查找:普遍适用性
String str = "下雨";
boolean isFlage = true;
for (int i = 0;i < arr3.length;i++){
	if (arr3[i].equals(str)){
		System.out.print("找到了,位置在:" + i);
		isFlage = false;
		break;
	}
	if(isFlage){
		System.out.println("没有找到指定内容");
	}
}
//2.二分法查找:数组要有序
int[] arr3 = new int[] {-1,0,1,2,3,4,5,6,7,8};
		int num = 4;
		boolean isFlage1 = true;
		int head = 0;//首索引位置
		int end = arr3.length - 1;//尾索引位置
		while (head <= end) {
			int mid = (head + end) / 2;
			if (arr3[mid] == num) {
				System.out.println("找到了,索引位置为:" + mid);
				isFlage1 = false;
				break;
			} else if (arr3[mid] > num) {
				end = mid - 1;
			} else {
				head = mid + 1;
			}
		}
		if (isFlage1) {
			System.out.println("没有找到");
		}
  1. 数组的排序算法
    ※ 选择排序
    直接选择排序、堆排序
    ※ 交换排序
    冒泡排序、快速排序
    ※ 插入排序
    直接插入排序、折半插入排序、Shell排序
    ※ 归并排序
    ※ 桶式排序
    ※ 基数排序

冒泡排序

// 冒泡排序
int[] bubble = new int[]{34,75,54,23,12,14,9,79};
//从小到大排列
for (int i = 0;i < bubble.length;i++){
	for (int j = 0;j < bubble.length - 1 - i;j++){
		if(bubble[j] > bubble[j + 1]){
			int temp = bubble[j];
			bubble[j] = bubble[j + 1];
			bubble[j + 1] = temp;	
		}
	}
}
for (int i = 0;i < bubble.length;i++){
	System.out.print(bubble[i] + '\t');
}

四、Arrays工具类的使用

  1. java.util包下
  2. Arrays:操作数组的工具类,提供了一系列操作数组的方法
  3. 常见方法:
    ① boolean equals(int[] a,int[] b) —>判断两个数组是否相等。一系列重载的方法
    ② String toString(int[] a) —>输出数组信息。一系列重载的方法
    ③ void fill(int[] a,int val) —>将指定值填充到数组之中。一系列重载的方法
    ④ void sort(int[] a) —>对数组进行排序。一系列重载的方法
    ⑤ int binarySearch(int[] a,int key) —>对排序后的数组进行二分法检索指定的值
    ⑥ copyOf(原数组,新数组长度) —>复制数组,从下标0开始复制,复制指定参数的个数
    ⑦ copyOfRange(原数组,from,to) —>复制数组任意部分,从form到to(不包含)的元素
    五、数组的常见异常
//1.数组角标越界异常:ArrayIndexOutOfBoundsException
	for(int i = 0;i <= arr.length;i++) {
		System.out.println(arr[i]);
	}
	System.out.println(arr[5]);
	System.out.println(arr[-1]);
//2.空指针异常:NullPointerException
	//举例1:
	int[] arr1 = new int[4];
	arr1 = null;
	System.out.println(arr1[0]);
	//举例2:
	int[][] arr2 = new int[3][];
	System.out.println(arr2[1][0]);
	//举例3:
	String[] arr3 = new String[3];
	System.out.println(arr3[0].toString());

六、随机数的生成
如何生成一个随机数?

  • Math.random():[0.0,1)
  • 如:生成[1,30]范围的随机整数:
  • ① Math.random():[0.0,1)
  • ② Math.random() * 30:[0.0,30.0)
  • ③ (int)(Math.random() * 30):[0,29]
  • ④ (int)(Math.random() * 30) + 1:[1,30]
  • 公式:获取[a,b]范围的随机整数:(int)(Math.random() * (b - a + 1)) + a 或 (int)(Math.random() * (b - a + 1) + a)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值