4.1 数组的概述
数组是具有相同数据类型的一组数据的集合。例如,球类的集合——足球、篮球、羽毛球等;电器集合——电视机、洗衣机、电风扇等。在程序设计中,可以将这些集合称为数组。数组中的每个元素具有相同的数据类型。在Java中同样将数组看作是一个对象,虽然基本数据类型不是对象,但是由基本数据类型组成的数组则是对象。在程序设计中引入数组可以更有效地管理和处理数据。我们经常使用的数组包括一维数组和二维数组等。
4.2 一维数组
4.2.1 创建一维数组
4.2.2 初始化一维数组
4.2.3 获取数组长度
例4.1
public class shuzu {
public static void main(String[] args) {//主函数
char a[] = { 'A' , 'B' , 'C' ,'D' };//创建一维数组
System.out.println("数组a的长度为" + a.length);//输出结果
char b[] = a;//创建一维数组b,直接等于数组a
System.out.println("数组b的长度为" + b.length);//输出结果
}
}
4.2.4 使用一维数组
例4.2
public class shuzu4_2 {
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] + "天");//输出结果
}
}
}
4.3 二维数组
比如快捷酒店,每一个楼层都有很多房间,这些房间都可以构成一维数组,如果这个酒店有500个房间,并且所有房间都在同一个楼层里,那么拿到499号房钥匙的旅客可能就不高兴了,从1号 扫一扫,看视频房走到499号房要花好长时间,因此每个酒店都不只有一个楼层,而是很多楼层,每一个楼层都会有很多房间,形成一个立体的结构,把大量的房间均摊了下来,这种结构就是二维表结构。
4.3.1 创建二维数组
4.3.2 初始化二维数组
例4.3
public class shzu4_12 {
public static void main(String[] args) {
/*第一种方式*/
int tdarr1[][] = { { 1, 3, 5 }, {5, 9, 10 } };//创建并初始化二维数组
/*第二种方式*/
int tdarr2[][] = new int[][] { { 65, 55, 12 }, {92, 7, 22 } };//创建并初始化二维数组
/*第三种方式*/
int tdarr3[][] = new int[2][3];//先给数组分配内存空间
tdarr3[0] = new int[] { 6, 54, 71 };//创建一维数组
tdarr3[1][0] = 63;//给第二行第一列赋值为63
tdarr3[1][1] = 10;//给第二行第二列赋值为10
tdarr3[1][2] = 7;//给第二行第三列赋值为7
}
}
4.3.3 使用二维数组
例4.4
public class shuzu4_4 {
public static void main(String[] args) {
char arr[][] = new char[4][];
arr[0] = new char[] {'春','眠','不','觉','晓'};//为每一行赋值
arr[1] = new char[] {'处','处','闻','啼','鸟'};//为每一行赋值
arr[2] = new char[] {'夜','来','风','语','声'};//为每一行赋值
arr[3] = new char[] {'花','落','知','多','少'};//为每一行赋值
/*横版输出*/
System.out.println("-----横版-----");
for (int i = 0; i < 4; i++) {//循环4行
for (int j = 0; j < 5; j++) {//循环5列
System.out.print(arr[i][j]);//输出数组中的元素
}
if (i % 2 == 0) {
System.out.println(",");//如果是一,三句,输出逗号
}else {
System.out.println("。");//如果是二,四句,输出句号
}
}
/*竖版输出*/
System.out.println("-----竖版输出-----");
for (int j = 0; j < 5; j++) {//列变行
for (int i = 3; i >= 0; i--) {//行变列
System.out.print(arr[i][j]);//输出数组中的元素
}
System.out.println();//换行
}
System.out.println("。,。,");//输出最后的标点
}
}
例4.5
public class shuzu4_5 {
public static void main(String[] args) {//主函数
int a[][]= new int[3][];//创建二维数,指定行数,不指定列数
a[0] = new int[] {52, 64,85,12,3,64};// 第一行分配6个元素
a[1] = new int[] { 41,99,2};//第二行分配3个元素
a[2] = new int[] { 285, 61,278,2 };// 第三行分配4个元素
for (int i =0; i<a.length; i++) {//数组长度判断条件
System.out.print("a[" +i+"]中有"+a[1].length+"个元素,分别是:"); //输出元素语段
for (int tmp : a[i]) { // foreach 循环输出数组中元素
System.out.print(tmp + " ");//输出元素个数
}
System.out.println();//输出元素
}
}
}
4.4 数组的基本操作
遍历数组就是获取数组中的每个元素。通常遍历数组都是使用for循环来实现的。遍历一维数扫一扫,看组很简单,也很好理解,下面详细介绍遍历二维数组的方法。
遍历二维数组需使用双层for循环,通过数组的 length属性可获得数组的长度。
例4.6
public class shuzu4_5 {
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();// 输出换行
}
}
}
4.4.2 填充和批量替换数组元素
数组中的元素定义完成后,可通过Armays类的静态方法1)来对数组中的元素进行分配,可以填充和替换的效果。0方法有两种参数类型,下面以int型数组为例介绍fll)方法的使用。
例4.7
import java.util.Arrays;
public class shuzu4_5 {
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]);//将数组中的元素依次输出
}
}
}
例4.8
import java.util.Arrays;
public class shuzu4_5 {
public static void main(String[] args) {//主函数
int arr[] = new int[] {45, 12, 2, 77, 31,91,10 };//创建int型数组
Arrays.fill(arr, 1, 4, 8);//使用fill()方法对数组进行填充
for (int i = 0; i < arr.length; i++) {//循环便利数组中的元素
System.out.println("第" + i + "个元素是:" + arr[i]);//将数组中的元素依次输出
}
}
}
4.4.3 复制数组
例4.9
import java.util.Arrays;
public class shuzu4_5 {
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("第" + i + "个元素:" + newarr[i]);//将新数组中的元素输出
}
}
}
例4.10
import java.util.Arrays;
public class shuzu4_5 {
public static void main(String[] args) {//主函数
int arr[] = new int[] { 23, 42 , 12, 84, 10 }; // 定义数组
int newarr[] = Arrays.copyOfRange(arr, 0, 3);//复制数组arr
for (int i = 0; i<newarr.length; i++) { // 循环变量复制后的新数组
System.out.println(newarr[i]);//将新数组中的元素输出
}
}
}
4.5 数组的排序
4.5.1 算法:冒泡排序
冒泡排序是最常用的数组排序算法之一,它以简洁的思想与实现方法备受青睐,是切学者题先扫接能的一个排序算法。使用冒泡排序时,排序数组元素的过程总是小数往前放,大数往后放,类似水中气泡往上升的动作,所以称作冒泡排序。
例4.11
import java.util.Arrays;
public class shuzu4_5 {
public static void main(String[] args) {//主函数
int arr[] = new int[] { 23, 42, 12, 8 }; // 声明数组
Arrays.sort(arr); //将数组进行排序
System.out.println("排序后的结果为");//输出排序后的结果
for (int i =0; i < arr.length; i++){ //循环遍历排序后的数组
System.out.print(arr[i]+" "); //将排序后数组中的各个元素输出
}
}
}
4.5.2 算法:选择排序
例4.12
public class shuzu4_3 {
/**
* 直接选择排序法
* @param array
* 要排序的数组
*/
public void sort(int[] array) {
int index;//定义整型变量
for (int i = 1; i <array.length; i++) {//for循环体语句
index = 0;//执行语句
for (int j = 1; j <= array.length - i; j++) {//for循环语句
if (array[j] > array[index]) {//if分支语句
index = j;//赋值
}
}
// 换在置array.length-i和index(最大值)上的两个数
int temp = array[array.length - i]; // 把第一个元素值保存到临时变量中
array[array.length - i] = array[index]; // 把第二个元素值保存到第一个元素单元中
array[index] = temp; // 把临时变量也就是第一个元素原值保存到第二个元素中
}
showArray(array);//输出直接选择排序后的数组值
}
/**
* 显示数组中的所有元素
* @param array
* 要显示的数组
*/
public void showArray(int[] array) {
System.out.println("选择排序的结果为:");
for (int i : array) { //遍历数组
System.out.print(i + " ");//输出每个数组元素值
}
System.out.println();//输出
}
public static void main (String[] args) {
int[] array ={63, 4, 24, 1, 3, 15 };//创建排序类的对象
shuzu4_3 sorter=new shuzu4_3();
//调用排序方法数组排序
sorter.sort(array);
}
}
4.5.3 Arrays.Sort()方法
例4.13
import java.util.Arrays;
public class shzu4_12 {
public static void main(String[] args) {
int arr[] = new int[] { 23, 42, 12, 8 }; // 声明数组
Arrays.sort(arr); //将数组进行排序
System.out.println("排序后的结果为");//输出排序后的结果
for (int i =0; i < arr.length; i++){ //循环遍历排序后的数组
System.out.print(arr[i]+" "); //将排序后数组中的各个元素输出
}
}
}