JavaRush /Java 博客 /Random-ZH /Java 中的数组

Java 中的数组

已在 Random-ZH 群组中发布
想象一下储藏室里的细胞。每个都有自己的编号,并且每个都包含某种“行李”对象。或者是一份酒单,其中所有类型的酒都编号,当您下订单时,只需给出饮料的编号即可。或者一个小组中的学生列表,其中学生“Andreev”将写在第一个单元格中,“Yakovlev”将写在最后一个单元格中。或者是一份飞机乘客名单,每个人都被分配了一个带有特定编号的座位。在Java中,为了处理相似的结构,即大量同质数据,经常使用Java中的数组。

什么是数组?

数组是一种存储相同类型元素的数据结构。它可以被认为是一组编号的单元格,每个单元格可以包含一些数据(每个单元格一个数据元素)。对特定小区的访问是通过其号码进行的。数组中元素的编号也称为索引。就Java而言,数组是同质的,也就是说,它的所有单元格都将存储相同类型的元素。因此,整数数组仅包含整数(例如int类型),字符串数组仅包含字符串,我们创建的Dog类的元素数组将仅包含Dog对象。也就是说,在 Java 中,我们不能将整数放入数组的第一个单元格中,将字符串放入第二个单元格中,并将“狗”放入第三个单元格中。 Java 中的数组

数组声明

如何声明一个数组?

与任何变量一样,Java 中的数组必须声明。您可以通过以下两种方式之一执行此操作。它们是等价的,但第一个更符合Java风格。第二个是 C 语言的遗留问题(许多 C 程序员转向 Java,为了方便起见,留下了替代方法)。该表显示了在 Java 中声明数组的两种方法:
不。 数组声明,Java 语法 例子 一条评论
1.
dataType[] arrayName;
int[] myArray;

Object[]
arrayOfObjects;
建议以这种方式声明数组,这是Java风格
2.
dataType arrayName[];
int myArray[];

Object
arrayOfObjects[];
从 C/C++ 继承的声明数组的方法也适用于 Java
在这两种情况下,dataType都是数组中变量的类型。在示例中我们声明了两个数组。一个将存储int类型的整数,另一个将存储Object类型的对象。因此,当声明一个数组时,它有一个名称和一个类型(数组变量的类型)。arrayName是数组的名称。

创建数组

如何创建数组?

与任何其他对象一样,您可以使用new运算符创建 Java 数组,即为其保留内存空间。这是这样完成的:
new typeOfArray [length];
其中typeOfArray是数组的类型,length是数组的长度(即单元格数),以整数 ( int ) 表示。然而,这里我们只为数组分配了内存,但没有将创建的数组与任何先前声明的变量关联起来。通常数组是先声明然后创建的,例如:
int[] myArray; // array declaration
myArray = new int[10]; // creation, that is, allocation of memory for an array of 10 elements of type int
这里我们声明了一个名为myArray 的整数数组,然后声明它由 10 个单元组成(每个单元将存储一个整数)。但是,更常见的是使用以下简写语法在声明后立即创建数组:
int[] myArray = new int[10]; // declaration and allocation of memory "in one bottle"
笔记:使用new创建数组后,其单元格将填充默认值。对于数字类型(如我们的示例),这将为 0,对于布尔值- false,对于引用类型 - null。因此,手术后
int[] myArray = new int[10];
我们得到一个由 10 个整数组成的数组,并且在程序期间该数组发生变化之前,每个单元格都包含一个 0。

有关数组的更多信息可以在文章“关于数组的一些事情”中找到

Java中的数组长度

正如我们上面所说,数组的长度是数组设计的元素数量。数组的长度一旦创建就无法更改。 笔记:在 Java 中,数组元素从零开始编号。也就是说,如果我们有一个包含 10 个元素的数组,则该数组的第一个元素的索引为 0,最后一个元素的索引为 9。 您可以使用lengthJava 中的数组 - 3变量访问数组的长度。例子:
int[] myArray = new int[10]; // created an array of integers with 10 elements and named it myArray
System.out.println(myArray.length); // printed to the console the length of the array, that is, the number of elements that we can put in the array
程序输出:
10

初始化数组并访问其元素

如何在Java中创建数组已经很清楚了。在此过程之后,我们不会得到一个空数组,而是一个填充有默认值的数组。例如,在int的情况下,这些将为 0,如果我们有一个包含引用类型数据的数组,则默认情况下,每个单元格中都会写入null。我们通过索引访问数组元素(即,向其中写入值或将其显示在屏幕上或对其执行某些操作)。初始化数组就是用特定的数据填充它(默认情况下不是)。 示例:让我们创建一个包含 4 个季节的数组,并用字符串值(这些季节的名称)填充它。
String[] seasons  = new String[4]; /* declared and created an array. Java allocated memory for an array of 4 strings, and now each cell is null (because the string is a reference type)*/

seasons[0] = "Winter"; /* in the first cell, that is, in the cell with a zero number, we wrote the string Winter. Here we get access to the zero element of the array and write a specific value there */
seasons[1] = "Spring"; // do the same procedure with cell number 1 (second)
seasons[2] = "Summer"; // ...number 2
seasons[3] = "Autumn"; // and with the last one, number 3
现在我们数组的所有四个单元格都包含季节的名称。初始化也可以以不同的方式完成,结合初始化和声明:
String[] seasons  = new String[] {"Winter", "Spring", "Summer", "Autumn"};
此外,new运算符可以省略:
String[] seasons  = {"Winter", "Spring", "Summer", "Autumn"};

如何在Java中将数组显示在屏幕上?

您可以在屏幕上(即控制台)显示数组元素,例如使用for循环。另一种在屏幕上显示数组的更短的方法将在下面的“使用数组的有用方法”段落中讨论。现在,让我们看一个数组循环输出的示例:
String[] seasons  = new String[] {"Winter", "Spring", "Summer", "Autumn"};
for (int i = 0; i < 4; i++) {
System.out.println(seasons[i]);
}
结果,程序将输出以下结果:
冬天春天夏天秋天

一维和多维 Java 数组

如果我们想要创建的不是数字数组、字符串数组或某些对象的数组,而是数组的数组怎么办?Java 允许您做到这一点。我们已经熟悉的数组int[] myArray = new int[8]就是所谓的一维数组。数组的数组称为二维的。它就像一个有行号和列号的表格。或者,如果您在矩阵上学习了线性代数的基础。 Java 中的数组 - 4为什么需要这样的数组?特别是,用于对相同的矩阵和表以及结构相似的对象进行编程。例如,国际象棋的比赛场地可以指定为 8x8 数组。多维数组的声明和创建如下:
int[][] myTwoDimentionalArray = new int [8][8];
该数组中正好有 64 个元素:myTwoDimentionalArray[0][0]myTwoDimentionalArray[0][1]myTwoDimentionalArray[1][0]myTwoDimentionalArray[1][1]依此类推,直到myTwoDimentionalArray[7][7]。因此,如果我们用它来表示棋盘,那么单元格 A1 将表示myTwoDimentionalArray[0][0],E2 将表示myTwoDimentionalArray[4][1]。有两个的地方就有三个。在 Java 中,您可以指定数组的数组...数组的数组的数组,等等。确实,三维及更多维的数组很少被使用。但是,使用三维数组,您可以对魔方等进行编程。

还有什么可读的

多维数组

处理数组的有用方法

为了在 Java 中使用数组,有一个java.util.Arrays类(数组在英语中的意思是“数组”)。一般来说,数组最常执行以下操作:填充元素(初始化)、检索元素(按数字)、排序和搜索。搜索和排序数组是一个单独的主题。一方面,自己练习和编写几种搜索和排序算法非常有用。另一方面,所有最佳实践都已编写并包含在 Java 库中,并且可以合法使用。 这是这个类的三个有用的方法

对数组进行排序

该方法void sort(int[] myArray, int fromIndex, int toIndex)按升序对整数数组或其子数组进行排序。

在数组中搜索所需的元素

int binarySearch(int[] myArray, int fromIndex, int toIndex, int key)此方法在已排序的myArray或子数组中搜索关键元素,从fromIndex开始,到toIndex结束。如果找到该元素,该方法返回其索引,如果没有找到 - 。 (-fromIndex)-1

将数组转换为字符串

该方法String toString(int[] myArray)将数组转换为字符串。问题是在 Java 数组中不要重写toString()。这意味着,如果您尝试直接将整个数组(而不是逐个元素,如“将数组打印到屏幕”中)显示到屏幕上 ( System.out.println(myArray)),您将获得该数组的类名和十六进制哈希码(这是由Object.toString()定义的)。如果你是初学者,你可能不明白方法的解释toString。在第一阶段,这不是必需的,但使用此方法可以简化阵列的输出。Java 可以轻松地显示数组,而无需使用循环。下面的示例将详细介绍这一点。

有关 sort、binarySearch 和 toString 的示例

让我们创建一个整数数组,使用toString将其显示在屏幕上,使用sort方法对其进行排序,并在其中查找一些数字。
class Main {
    public static void main(String[] args) {
        int[] array = {1, 5, 4, 3, 7}; //declaring and initializing the array
        System.out.println(array);//trying to display our array on the screen without the toString method - we get a hexadecimal number
        System.out.println(Arrays.toString(array));//печатаем массив "правильно"
        Arrays.sort(array, 0, 4); // sort the entire array from zero to the fourth member
        System.out.println(Arrays.toString(array));//print the sorted array to the screen
        int key = Arrays.binarySearch(array, 5); // ищем key - число 5 в отсортированном массиве.
        //binarySearch method will return the index of the sorted array element, in which the required number is "hidden"
        System.out.println(key);//распечатываем индекс искомого числа
System.out.println(Arrays.binarySearch(array, 0));//а теперь попробуем найти число, которого в массиве нет,
        // and immediately display the result on the screen

    }
}
程序输出:
[I@1540e19d [1, 5, 4, 3, 7] [1, 3, 4, 5, 7] 3 -1
第一行是尝试在不使用toString 的情况下显示数组,第二行是使用toString显示数组,第三行是排序数组,第四行是排序数组中所需数字 5 的索引(请记住,我们从零,因此数组的第四个元素的索引为 3)。在第五行中,我们看到值-1。数组没有这样的索引。输出表明所需元素(在本例中为 0)不在数组中。

有关 Array 类方法的更多信息

Arrays类及其使用 ——文章介绍Array类的一些方法

关于数组的主要内容

  • 数组的主要特征:放入其中的数据类型、名称和长度。
    后者在初始化(为数组分配内存)期间决定,前两个参数在声明数组时确定。

  • 数组大小(单元格数量)必须以int形式定义

  • 创建数组后就无法更改其长度。

  • 数组元素可以通过其索引来访问。

  • 在数组中,与 Java 中的其他地方一样,元素从零开始编号。

  • 数组创建过程完成后,将用默认值填充该数组。

  • Java 中数组的结构与 C++ 中不同。它们与指向动态数组的指针几乎相同。

有关数组的有用材料

想了解更多关于数组的知识吗?请看看下面的文章。关于这个主题有很多有趣且有用的信息。
  1. Something About Arrays - 关于数组的详细文章

  2. Arrays类及其使用 ——文章介绍Array类的一些方法

  3. 多维数组- 有关多维数组的详细文章和示例。

  4. 返回零长度数组,而不是 null - 《EffectiveProgramming》作者 Joshua Bloch 谈论如何更好地返回空数组

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION