首页 专题 文章 代码 归档
Java 数组类型
2020.02.25 11:59 2020.02.25 19:07

1. 数组

1、数组是同一数据类型的集合,数组一旦创建后,大小就不可变;

2、可以通过索引访问数组元素,但索引超出范围将报错;

3、数组元素可以是值类型(如int)或引用类型(如String),但数组本身是引用类型;

1.1. 声明数组

必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:

dataType[] arrayRefVar;  // 首选的方法

// 或者

dataType arrayRefVar[];  // 效果相同,但不是首选方法

1.2. 创建数组

Java语言使用new操作符来创建数组,语法如下:

arrayRefVaribal = new dataType[Size];

数组变量的声明,和创建数组可以用一条语句完成,如下所示:

dataType[] arrayRefVar = new dataType[arraySize];

另外,还可以使用如下的方式创建数组:

dataType[] arrayRefVar = {value0, value1, ..., valuek};

1.3. 实例

下面我们是:先申明一个10个空间的Int类型数组,并依次赋值:

private static void test09() {
    // 第一种方法,储存10为童鞋的成绩
    int[] grade = new int[10];
    grade[0] = 90;
    grade[1] = 79;
    grade[2] = 91;
    grade[3] = 80;
    // ...
    System.out.println("grade = " + Arrays.toString(grade));
    //grade = [90, 79, 91, 80, 0, 0, 0, 0, 0, 0]
}

当然,我们没并没有把申请的空间全部赋满,所以后面全是0;这也证明前面所说,int类型默认值是0;

如果我们申明时就赋值,那么便可以不指定大小

private static void test10() {
    // 如果我们申明时就赋值,那么便可以不指定大小
    int[] grade = new int[]{12,34,5,678,75,32,2,12,31,21,31,41};
    System.out.println(Arrays.toString(grade));
    // [12, 34, 5, 678, 75, 32, 2, 12, 31, 21, 31, 41]

}

2. 处理数组

数组除了是同一类型的元素的集合,还具备一些特殊的属性和方法!

2.1. 循环

我们这里先给大家介绍使用一下for循环:

for-i循环是最简单、基本所有语言通用的一种循环:

private static void test10() {
    // 如果我们申明时就赋值,那么便可以不指定大小
    int[] grade = new int[]{12, 34, 5, 678, 75, 32, 2, 12, 31, 21, 31, 41};
    for (int i = 0; i < grade.length; i++) {
        System.out.println(grade[i]);
    }

}

除了for-i循环,Java还提供增强for循环:

private static void test10() {
    // 如果我们申明时就赋值,那么便可以不指定大小
    int[] grade = new int[]{12, 34, 5, 678, 75, 32, 2, 12, 31, 21, 31, 41};
    for (int value : grade) {
        // 增强for循环
        System.out.println(value);
    }

}

这是JDK 1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。

2.2. 排序

对数组进行排序是程序中非常基本的需求。常用的排序算法有冒泡排序、插入排序和快速排序等。

来看一下如何使用冒泡排序算法对一个整型数组从小到大进行排序:

private static void test13() {
    int[] num = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
    // 排序前:
    System.out.println(Arrays.toString(num));
    /*[28, 12, 89, 73, 65, 18, 96, 50, 8, 36]*/
    for (int i = 0; i < num.length - 1; i++) {
        for (int j = 0; j < num.length - i - 1; j++) {
            if (num[j] > num[j+1]) {
                // 交换num[j]和num[j+1]:
                int tmp = num[j];
                num[j] = num[j+1];
                num[j+1] = tmp;
            }
        }
    }
    // 排序后:
    System.out.println(Arrays.toString(num));
    /*[8, 12, 18, 28, 36, 50, 65, 73, 89, 96]*/
}

当然,以上是我们自己手写的排序,在Arrays类中,已经为我们集成了排序:

private static void test14() {
    int[] num = {28, 32, 11, 13, 65, 78, 96, 50, 10, 55};
    Arrays.sort(num);
    System.out.println(Arrays.toString(num));
    /*[10, 11, 13, 28, 32, 50, 55, 65, 78, 96]*/
}

只需简单一行代码即可排序。

3. 多维数组

多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组,例如:

String str[][] = new String[3][4];

type 可以为基本数据类型和复合数据类型,arraylength1 和 arraylength2 必须为正整数,arraylength1 为行数,arraylength2 为列数。

int a[][] = new int[2][3];

二维数组 a 可以看成一个两行三列的数组。

多维数组的引用(以二维数组为例)

对二维数组中的每个元素,引用方式为 arrayName[index1][index2],例如:

num[1][0];

4. Arrays类

Arrays类前面我们代码中已经使用过了,

java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。

具有以下功能:

  • 转换成字符串:toString方法
  • 给数组赋值:通过 fill 方法。
  • 对数组排序:通过 sort 方法,按升序。
  • 比较数组:通过 equals 方法比较数组中元素值是否相等。
  • 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
  • .....
本节阅读完毕! (分享
二维码图片 扫描关注我们哟