数组

创建一维数组

(1)先声明,再用new运算符进行内存分配

声明一维数组有两种方式:数组元素类型 数组名字[]; 数组元素类型[] 数组名字;
例如:int arr[]; String str[];
为数组分配内存空间时必须指明数组的长度,为数组分配内存空间的语法格式:
数组名字 = new 数组元素的类型[数组元素的个数];
例如:arr = new int[5];

(2)声明的同时为数组分配内存

数组元素类型 数组名字 = new 数组元素的类型[数组元素的个数];
例如:int month[] = new int [12];

初始化一维数组

主要有两种形式:
int arr[] = new int[]{1,2,3,4,5,25};
int arr2[] = {32,43,12,1};

使用一维数组

public class GetDay { // 创建类
	public static void main(String[] args) { // 主方法
		// 创建并初始化一维数组
		int day[]=new int[]{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
		for (int i = 0; i < 12; i++) { // 利用循环将信息输出
			System.out.println((i + 1) + "月有" + day[i] + "天"); // 输出的信息
		}
	}
}

在这里插入图片描述

创建二维数组

数组元素类型 数组名字[][];
数组元素类型[][] 数组名字;

例如:int myarr[][];

为数组分配内存:

(1)直接为每一维分配内存空间
a = new int[2][4];
(2)分别为每一维分配内存
a = new int[2][];
a[0] = new int[2];
a[1] = new int[3];
在这里插入图片描述

二维数组初始化

type arrayname[][] = {value1,value2,…valuen};
例如:int myarr[][] = {{12,0},{45,3}};
可以直接给某个元素赋值:a[1][1] = 20;

使用二维数组

public class Matrix { // 创建类
	public static void main(String[] args) { // 主方法
		int a[][] = new int[3][4]; // 定义二维数组
		for (int i = 0; i < a.length; i++) {
			for (int j = 0; j < a[i].length; j++) { // 循环遍历数组中的每个元素
				System.out.print(a[i][j]); // 将数组中的元素输出
			}
			System.out.println(); // 输出空格
		}
	}
}

遍历数组

通常遍历数组使用for循环,通过数组的length属性可以获得数组的长度。
实例中实现了将二维数组中的元素呈梯形输出。

public class Trap { // 创建类
	public static void main(String[] args) { // 主方法
		int b[][] = new int[][]{{ 1 },{ 2, 3},{ 4, 5, 6 } };// 定义二维数组
		for (int k = 0; k < b.length; k++) {
			for (int c=0;c<b[k].length; c++){// 循环遍历二维数组中的每个元素
				System.out.print(b[k][c]); // 将数组中的元素输出
			}
			System.out.println(); // 输出空格
		}
	}
}

运行结果如图所示
在这里插入图片描述
遍历数组时,使用foreach语句可能会更简单。

public class Tautog { // 创建类
	public static void main(String[] args) { // 主方法
		int arr2[][] = { { 4, 3 }, { 1, 2 } }; // 定义二维数组
		System.out.println("数组中的元素是:"); // 提示信息
		int i = 0;// 外层循环计数器变量
		for (int x[] : arr2) { // 外层循环变量为一维数组
			i++;// 外层计数器递增
			int j = 0;// 内层循环计数器
			for (int e : x) { // 循环遍历每一个数组元素
				j++;// 内层计数器递增
				if (i == arr2.length && j == x.length) { // 判断变量是二维数组中的最后一个元素
					System.out.print(e); // 输出二维数组的最后一个元素
				} else
					// 如果不是二维数组中的最后一个元素
					System.out.print(e + "、"); // 输出信息
			}
		}
	}
}

运行结果为:
数组中的元素是:
4、3、1、2

填充替换数组元素

数组中的元素定义完成后,可通过Arrays类的静态方法fill()来对数组中的元素替换。
(1)fill (int[] a,int value)
该方法可将指定的int值分配给int型数组的每个元素。
a:要进行元素替换的数组
value:要存储数组中所有元素的值
在项目中创建一维数组,并实现通过fill()方法填充数组元素,最后将各个元素输出。

import java.util.*;

public class Swap { // 创建类
	public static void main(String[] args) { // 主方法
		int arr[] = new int[5]; // 创建int型数组
		Arrays.fill(arr, 8); // 使用同一个值对数组进行填充
		for (int i = 0; i < arr.length; i++) { // 循环遍历数组中的元素
			// 将数组中的元素依次输出
			System.out.println("第" + i + "个元素是:" + arr[i]);
		}
	}
}

运行结果如图
在这里插入图片描述
(2)fill (int[] a,int fromIndex,int toIndex,int value)
该方法将指定的int值分配给int型数组指定范围中的每个元素。填充的范围从索引fromIndex(包括)一直到索引toIndex(不包括)。如果fromIndex=toIndex,则填充范围为空。
在项目中创建一维数组,并实现通过fill()方法填充数组元素,最后将各个元素输出。

import java.util.*;

public class Displace { // 创建类
	public static void main(String[] args) { // 主方法
		int arr[] = new int[] { 45, 12, 2, 10 }; // 定义并初始化int型数组arr
		Arrays.fill(arr, 1, 2, 8); // 使用fill方法对数组进行初始化
		for (int i = 0; i < arr.length; i++) { // 循环遍历数组中元素
			// 将数组中的每个元素输出
			System.out.println("第" + i + "个元素是:" + arr[i]);
		}
	}
}

运行结果如图
在这里插入图片描述

对数组进行排序

通过Array类的静态sort()方法可以实现对数组排序
Arrays.sort(object)
object是指进行排序的数组名称

import java.util.*;

public class Taxis { // 创建类
	public static void main(String[] args) { // 主方法
		int arr[] = new int[] { 23, 42, 12, 8 }; // 声明数组
		Arrays.sort(arr); // 将数组进行排序
		for (int i = 0; i < arr.length; i++) { // 循环遍历排序后的数组
			System.out.println(arr[i]); // 将排序后数组中的各个元素输出
		}
	}
}

运行结果如图
在这里插入图片描述
数字排在字母前面,大写字母排在小写字母前面。

复制数组

(1)copyOf()方法:复制数组至指定长度
copyOf(arr,int newlength)
arr:要进行复制的数组
newlength:int型常量,指复制后的新数组的长度。如果newlength大于数组arr的长度,则用0填充(整型数组用0填充,char型数组用null填充);如果newlength小于数组arr的长度,则从arr的第一个元素开始截取至满足新数组长度为止。

import java.util.*;

public class Cope { // 创建类
	public static void main(String[] args) { // 主方法
		int arr[] = new int[] { 23, 42, 12, }; // 定义数组
		int newarr[] = Arrays.copyOf(arr, 5); // 复制数组arr
		for (int i = 0; i < newarr.length; i++) { // 循环变量复制后的新数组
			System.out.println(newarr[i]); // 将新数组输出
		}
	}
}

运行结果如图
在这里插入图片描述
(2)copyOfRange()方法:将指定数组的指定长度复制到一个新数组中
copyOfRange(arr,int fromIndex,int toIndex)

import java.util.*;

public class Repeat { // 创建类
	public static void main(String[] args) { // 主方法
		int arr[] = new int[] { 23, 42, 12, 84, 10 }; // 定义数组
		int newarr[] = Arrays.copyOfRange(arr, 0, 3); // 复制数组
		for (int i = 0; i < newarr.length; i++) { // 循环遍历复制后的新数组
			System.out.println(newarr[i]); // 将新数组中的每个元素输出
		}
	}
}

运行结果如图
在这里插入图片描述

数组查询

(1)binarySearch(Object[] a,Object key)
a:要搜索的数组
key:要搜索的值
如果key包含在数组中,则返回搜索值的索引;否则返回-1或“-”(插入点)。插入点是搜索键将要插入数组的那一点,即第一个大于此键的元素索引。

int arr[] = new int[]{4,25,10};             //创建并初始化数组
Arrays.sort(arr);                           //将数组进行排序
int index = Array.binarySearch(arr,0,1,8);

上述代码中变量index的值是元素“8”在数组arr中索引在0~1内的索引位置。由于在指定范围内并不存在“8”,index的值是“-”(插入点)。如果对数组进行排序,元素“8”应该在“25”的前面,因此插入点应是元素“25”的索引值2,所以index的值为-2。
在进行查询之前必须先进行排序(用sort()方法),否则结果是不确定的。
在主方法中创建一维数组ia,实现查找元素4在数组ia中的索引位置。

import java.util.*;

public class Example { // 创建类
	public static void main(String[] args) { // 主方法
		int ia[] = new int[] { 1, 8, 9, 4, 5 }; // 定义int型数组ia
		Arrays.sort(ia); // 将数组进行排序
		int index = Arrays.binarySearch(ia, 4); // 查找数组ia中元素4的索引位置
		System.out.println("4的索引位置是:" + index); // 将索引输出
	}
}

运行结果为:4的索引位置是:1
注意,索引位置为1是排序后的结果
(2)binarySearch(Object[] a,int fromIndex,int toIndex,Object key)
在主方法中创建String数组,实现查找元素“cd”在指定范围的数组str中的索引位置。

import java.util.*;

public class Rakel { // 创建类
	public static void main(String[] args) { // 主方法
		// 定义String型数组str
		String str[] = new String[] { "ab", "cd", "ef", "yz" };
		Arrays.sort(str); // 将数组进行排序
		// 在指定的范围内搜索元素"cd"的索引位置
		int index = Arrays.binarySearch(str, 0, 2, "cd");
		System.out.println("cd的索引位置是:" + index); // 将索引输出
	}
}

运行结果为:cd的索引位置是:1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值