Java 从入门到精通(第4版)第6章 数组

Posted zwwhnly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 从入门到精通(第4版)第6章 数组相关的知识,希望对你有一定的参考价值。

开始讲解之前,先列出本章的提纲,如下图所示:

技术分享图片

6.1 数组概述

数组是具有相同数据类型的一组数据的集合。

数组中的每个元素具有相同的数据类型。

可根据数组的维数将数组分为一维数组、二维数组……

6.2 一维数组的创建及使用

6.2.1 创建一维数组

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

int arr[];
arr = new int[5];

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

int month[] = new int[12]; 

说明:使用new关键字为数组分配内存时,整型数组中各个元素的初始值都为0。

6.2.2 初始化一维数组

int arr[] = new int[]{1, 2, 3, 5, 25};
int arr2[] = {34, 23, 12, 6};

6.2.3 使用一维数组

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] + "天");
}

 输出结果如下图所示:

技术分享图片

6.3 二维数组的创建及使用

6.3.1 二维数组的创建

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

int myArr[][];
myArr = new int[2][4];
int myArr[][] = new int[2][];
myArr[0] = new int[4];
myArr[1] = new int[4];

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

int myArr[][] = new int[2][4];

6.3.2 二维数组初始化

int myArr[][] = {{12, 0}, {45, 10}};

初始化二维数组后,要明确数组的下标都是从0开始的,例如,上面的代码中myArr[1][1]的值是10,赋值语句为:myArr[1][1] = 20;

6.3.3 使用二维数组

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();
}

输出结果如下图所示:

技术分享图片

 说明:对于整型二维数组,创建成功之后系统会赋给数组中每个元素初始值为0。

6.4 数组的基本操作

6.4.1 遍历数组

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();
}

输出结果如下图所示:

技术分享图片

int arr[][] = {{4, 3}, {1, 2}};
System.out.println("数组中的元素是:");
int i = 0;
for (int x[] : arr) {
    i++;
    int j = 0;
    for (int e : x) {
        j++;
        if (i == arr.length && j == x.length) {
           System.out.print(e);
        } else {
           System.out.print(e + "、");
        }
      }
}

输出结果如下图所示:

技术分享图片

6.4.2 填充替换数组元素 

int arr[] = new int[5];
Arrays.fill(arr, 8);
for (int i = 0; i < arr.length; i++) {
    System.out.println("第" + i + "个元素是:" + arr[i]);
}

输出结果如下图所示:

技术分享图片

fill方法还提供了一个重载,可以指定填充的范围从索引fromIndex(包括)一直到索引toIndex(不包括),如果fromIndex == toIndex,则填充范围为空。

int arr[] = new int[]{45, 12, 2, 10};
Arrays.fill(arr, 1, 2, 8);
for (int i = 0; i < arr.length; i++) {
     System.out.println("第" + i + "个元素是:" + arr[i]);
}

输出结果如下图所示:

技术分享图片

注意:如果指定的索引位置大于或者等于要进行填充的数组的长度,则会报出ArrayIndexOutOfBoundsException(数组越界)异常。 

技术分享图片

6.4.3 对数组进行排序

int arr[] = new int[]{23, 42, 12, 8};
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

 输出结果如下图所示:

技术分享图片

6.4.4 复制数组

int arr[] = new int[]{23, 42, 12};
int newArr[] = Arrays.copyOf(arr, 5);
for (int i = 0; i < newArr.length; i++) {
     System.out.println(newArr[i]);
}

输出结果如下图所示:

技术分享图片

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]);
}

输出结果如下图所示:

技术分享图片

6.4.5 数组查询

int arr[] = new int[]{4, 25, 10};
Arrays.sort(arr);
int index = Arrays.binarySearch(arr, 0, 1, 8);

System.out.println(index); // 输出-2
int arr[] = new int[]{1, 8, 9, 4, 5};
Arrays.sort(arr);
int index = Arrays.binarySearch(arr, 4);

System.out.println(index); // 输出1
String str[] = new String[]{"ab", "cd", "ef", "yz"};
Arrays.sort(str);
int index = Arrays.binarySearch(str, 0, 2, "cd");

System.out.println(index); // 输出1

关于6.5节,数组排序的3种算法,在后续博客中分别一一讲解……

 

以上是关于Java 从入门到精通(第4版)第6章 数组的主要内容,如果未能解决你的问题,请参考以下文章

Java从入门到精通(第5版) 中文PPT+源码+案例+视频教程 完整版4.98GB高清下载

Java并发编程从入门到精通 - 第6章:线程池

PHP从入门到精通(第3版) PDF扫描版[45MB]完整版下载

HTML5从入门到精通的内容介绍

eclipse从入门到精通 高清珍藏版

暑假第五周总结(2018.8.6-8.12)