数组
来源:互联网 发布:投资公司的网络销售 编辑:程序博客网 时间:2024/06/08 15:59
数组
翻译自ORACLE Java Tutorials –Arrays
数组是一个容器对象,它保存单个类型的固定数量的值。 创建数组时,建立数组的长度。 创建后,其长度是固定的。 你已经看到了一个数组的例子,在“Hello World!”的主要方法中。 应用。 本节将更详细地讨论数组。
数组中的每个项目称为元素,每个元素都由其数字索引访问。 如上图所示,编号从0开始。例如,第9个元素将在索引8处被访问。
以下程序ArrayDemo创建一个整数数组,在数组中放置一些值,并将每个值打印到标准输出。
class ArrayDemo { public static void main(String[] args) { // 声明为整数数组 int[] anArray; //给十个整数分配内存 anArray = new int[10]; // 初始化第一个元素 anArray[0] = 100; // 初始化第二个元素 anArray[1] = 200; // 等等 anArray[2] = 300; anArray[3] = 400; anArray[4] = 500; anArray[5] = 600; anArray[6] = 700; anArray[7] = 800; anArray[8] = 900; anArray[9] = 1000; System.out.println("Element at index 0: " + anArray[0]); System.out.println("Element at index 1: " + anArray[1]); System.out.println("Element at index 2: " + anArray[2]); System.out.println("Element at index 3: " + anArray[3]); System.out.println("Element at index 4: " + anArray[4]); System.out.println("Element at index 5: " + anArray[5]); System.out.println("Element at index 6: " + anArray[6]); System.out.println("Element at index 7: " + anArray[7]); System.out.println("Element at index 8: " + anArray[8]); System.out.println("Element at index 9: " + anArray[9]); }}
该程序的输出是:
Element at index 0: 100Element at index 1: 200Element at index 2: 300Element at index 3: 400Element at index 4: 500Element at index 5: 600Element at index 6: 700Element at index 7: 800Element at index 8: 900Element at index 9: 1000
在现实世界的编程情境中,您可能会使用支持的循环结构之一来遍历数组的每个元素,而不是像前面的示例一样单独写入每一行。 但是,该示例清楚地说明了数组语法。 您将在“控制流程”部分中了解各种循环结构(for,while和do-while)。
声明一个变量来引用一个数组
下面程序使用以下代码行声明一个数组(名为anArray):
// 声明一个整数数组int[] anArray;
像其他类型的变量声明一样,数组声明有两个组件:数组的类型和数组的名称。 数组的类型写为type [],其中type是包含元素的数据类型; 括号是指示此变量保存数组的特殊符号。 数组的大小不是其类型的一部分(这就是为什么括号为空)。 数组的名称可以是任何您想要的名称,只要它遵循以前在命名部分中讨论的规则和约定。 与其他类型的变量一样,声明实际上并不创建数组; 它只是告诉编译器这个变量将保存一个指定类型的数组。
类似地,您可以声明其他类型的数组:
byte[] anArrayOfBytes;short[] anArrayOfShorts;long[] anArrayOfLongs;float[] anArrayOfFloats;double[] anArrayOfDoubles;boolean[] anArrayOfBooleans;char[] anArrayOfChars;String[] anArrayOfStrings;
您也可以在数组名称后放置括号:
//这个方式是不鼓励的float anArrayOfFloats [];
然而,习惯上不鼓励这种形式; 括号标识数组类型,并应显示类型名称。
创建,初始化和访问数组
创建数组的一种方法是使用新的运算符。 ArrayDemo程序中的下一个语句为10个整数元素分配一个具有足够内存的数组,并将数组分配给anArray变量。
//创建一个整数数组anArray = new int [10];
如果此语句丢失,则编译器将打印如下所示的错误,并且编译失败:
ArrayDemo.java:4: Variable anArray may not have been initialized.
接下来的几行将值分配给数组的每个元素:
anArray [0] = 100; //初始化第一个元素anArray [1] = 200; //初始化第二个元素aArray [2] = 300; //等等
每个数组元素都由其数字索引访问:
System.out.println(“索引号为0的元素1”+ anArray [0]);System.out.println(“Index 2 at index 1:”+ anArray [1]);System.out.println(“索引2中的元素3:”+ anArray [2]);
或者,您可以使用快捷方式语法来创建和初始化数组:
int[] anArray = { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};
这里,数组的长度由大括号之间提供的值的数量确定,并用逗号分隔。
您还可以通过使用两个或更多个括号(例如String [] []名称来声明数组数组(也称为多维数组)。 因此,每个元素必须由相应数量的索引值访问。
在Java编程语言中,多维数组是一个数组,其组件本身就是数组。 这与C或Fortran中的数组不同。 这样做的结果是允许行的长度变化,如下面的MultiDimArrayDemo程序所示:
class MultiDimArrayDemo { public static void main(String[] args) { String[][] names = { {"Mr. ", "Mrs. ", "Ms. "}, {"Smith", "Jones"} }; // Mr. Smith System.out.println(names[0][0] + names[1][0]); // Ms. Jones System.out.println(names[0][2] + names[1][1]); }}
该程序的输出是:
Mr. SmithMs. Jones
最后,您可以使用内置的length属性来确定任何数组的大小。 以下代码将数组的大小打印到标准输出:
System.out.println(anArray.length);
复制数组
System类有一个arraycopy方法,您可以使用它来有效地将数据从一个数组复制到另一个数组:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
两个Object参数指定要复制的数组和要复制的数组。三个int参数指定源数组中的起始位置,目标数组中的起始位置和要复制的数组元素的数量。
以下程序,ArrayCopyDemo,声明一个char元素数组,拼写“decaffeinated”一词。它使用System.arraycopy方法将数组组件的子序列复制到第二个数组中:
class ArrayCopyDemo { public static void main(String[] args) { char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd' }; char[] copyTo = new char[7]; System.arraycopy(copyFrom, 2, copyTo, 0, 7); System.out.println(new String(copyTo)); }}
该程序的输出是:
caffein
数组操作
数组是用于编程的强大而有用的概念。 Java SE提供了执行与数组相关的一些最常见操作的方法。例如,ArrayCopyDemo示例使用System类的arraycopy方法,而不是手动遍历源数组的元素,并将每个元素放在目标数组中。这是在幕后执行的,使开发人员只能使用一行代码来调用该方法。
为了方便起见,Java SE提供了几种在java.util.Arrays类中执行数组操作(常见任务,如复制,排序和搜索数组)的方法。例如,可以将上一个示例修改为使用java.util.Arrays类的copyOfRange方法,您可以在ArrayCopyOfDemo示例中看到。不同的是,使用copyOfRange方法不需要在调用方法之前创建目标数组,因为方法返回了目标数组:
class ArrayCopyOfDemo { public static void main(String[] args) { char[] copyFrom = {'d', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd'}; char[] copyTo = java.util.Arrays.copyOfRange(copyFrom, 2, 9); System.out.println(new String(copyTo)); }}
如您所见,该程序的输出是相同的(caffein),尽管它需要较少的代码行。请注意,copyOfRange方法的第二个参数是要复制的范围的初始索引,包括第三个参数是要复制的范围的最终索引。在此示例中,要复制的范围不包括索引9(包含字符a)的数组元素。
java.util.Arrays类中的方法提供的一些其他有用的操作是:
- 搜索数组以获取特定值以获取其放置的索引(binarySearch方法)。
- 比较两个数组以确定它们是否相等(equals方法)。
- 填充数组以在每个索引中放置一个特定的值。(fill方法)
- 将数组排列成升序。这可以使用sort方法或并行使用Java SE 8中引入的parallelSort方法顺序完成。多处理器系统上的大型数组的并行排序比顺序数组排序更快。(parallelSort方法)
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- Markdown的一些语法(好难记啊QAQ)
- mvc、mvp 和mvvm区别
- 【广告项目】STS实现SVN账户轻松切换
- 习题 3-7 DNA序列(DNA Consesus String) UVa 1368
- SpringBoot专题1----springboot与mybatis的完美融合
- 数组
- NOI2017同步赛游记
- 大二课本之链表理解
- HDU 6152 Friend-Graph
- HDU
- 输入输出外挂
- 使用idea maven实现Spring+mybati的整合
- BZOJ 3998 [TJOI2015]弦论 后缀数组
- linux多线程学习设置线程调度权限