1.基本概念

  数组中的每一项称为元素,每个元素都通过数字索引(也可以称为下标)访问,编号从0开始。例如,第4个元素的索引为3。下面的程序创建了一个int类型的数组,把一些值放入数组中并将每个值打印出来:

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;
// 将每个元素打印出来
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]);
}
}

  该程序的输出是:

Element at index 0: 100
Element at index 1: 200
Element at index 2: 300
Element at index 3: 400

  在实际编程时,可能会使用循环结构来遍历数组的每个元素,而不是像上面的示例中那样单独处理每个元素。但是,该示例清楚地说明了数组的语法。在后续教程中将会介绍各种循环结构(for,while,和do-while)。

2.声明一个引用数组的变量

  前面的程序使用以下代码声明了一个名为anArray的数组:

int[] anArray;

  与声明其他类型的变量一样,数组变量的声明也有两个部分:数组的类型和数组的名称。数组的类型写为type[],type表示元素的数据类型,方括号表示这是一个数组变量。与其他类型的变量一样,声明一个数组变量实际上并没有创建数组,它只是告诉编译器这个变量可以引用一个指定类型的数组。还可以像其他语言那样将方括号放在名称后面,例如int anArray[],但在Java中并不推荐这种写法。

3.创建、初始化和访问数组

  一种创建数组的方法是使用new操作符。下面的语句创建了一个长度为10的整数数组,并将这个数组的引用赋值给了anArray:

anArray = new int[4];

  下面的语句为数组中的每个元素赋值:

anArray[0] = 100;
anArray[1] = 200;
anArray[2] = 300;
anArray[3] = 400;

  每个元素都可以通过数字索引进行访问:

System.out.println("Element 1 at index 0: " + anArray[0]);
System.out.println("Element 2 at index 1: " + anArray[1]);
System.out.println("Element 3 at index 2: " + anArray[2]);

  也可以通过以下语法创建并初始化一个数组:

int[] anArray = { 100, 200, 300, 400 };

  这里数组的长度由大括号内元素的数量决定,每个元素使用逗号分隔。

  还可以使用两对或更多对方括号声明数组(也称为多维数组),例如String[][] names。在多维数组中,数组的每一个元素都是数组。这与C或C++中的数组不同。这样做的结果是允许每个数组的长度不同,例如下面的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. Smith
Ms. Jones

  可以使用数组的length属性来获取数组的大小。以下代码将数组的大小打印到控制台:

System.out.println(anArray.length);

4.拷贝数组

  有时候需要将数组拷贝一份,这样在操作一个数组时并不会影响另外一个数组。下面的代码并不能完成数组的拷贝:

anotherArray = anArray;

  因为这样知识将anArray对数组的引用赋值给了anotherArray,此时的anotherArray和anArray引用了同一个数组,在任何一个变量上执行对数组的操作都会影响到数组。System类有一个arraycopy方法,使用它可将数据从一个数组复制到另一个数组:

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

  两个Object参数指定源数组和目标数组,三个int参数指定源数组中的起始位置,目标数组中的起始位置以及要复制的元素的数量。下面的声明了一个char数组,它使用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

  Arrays类(位于java.util包中)也提供了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));
}
}

  这个方法的三个参数分别表示源数组,要复制元素的起始位置(包含)和结束位置(不包含)。

  java.util.Arrays类中提供的一些其他有用的方法是:

  • binarySearch方法:在数组中搜索特定值并获取其索引。
  • equals方法:比较两个数组以确定它们是否相等。
  • fill方法:使用指定值填充数组。
  • sort方法:按升序对数组进行排序。

Java基础教程(6)--数组的更多相关文章

  1. Java基础教程:Lambda表达式

    Java基础教程:Lambda表达式 本文部分内容引用自OneAPM:http://blog.oneapm.com/apm-tech/226.html 引入Lambda Java 是一流的面向对象语言 ...

  2. Java基础教程:多线程基础(1)——基础操作

    Java:多线程基础(1) 实现多线程的两种方式 1.继承Thread类 public class myThread extends Thread { /** * 继承Thread类,重写RUN方法. ...

  3. Java基础教程:反射基础

    Java基础教程:反射基础 引入反射 反射是什么 能够动态分析类能力的程序称为反射. 反射是一种很强大且复杂的机制. Class类 在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时 ...

  4. Java基础教程:面向对象编程[2]

    Java基础教程:面向对象编程[2] 内容大纲 访问修饰符 四种访问修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default ...

  5. Java基础教程:面向对象编程[1]

    Java基础教程:面向对象编程 内容大纲 Java语言概述 Java语言特点 1.Java为纯面向对象的语言,它能够直接反映现实生活中的对象.总之,Everything is object! 2.平台 ...

  6. Java基础教程:HashTable与HashMap比较

    Java基础教程:HashTable与HashMap比较 1.  关于HashMap的一些说法: a)  HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体.HashMap的底层结 ...

  7. Java基础教程:JDBC编程

    Java基础教程:JDBC编程 1.什么是JDBC JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. JDBC A ...

  8. Java基础教程:对象比较排序

    Java基础教程:对象比较排序 转载请标明出处:http://blog.csdn.net/wangtaocsdn/article/details/71500500 有时候需要对对象列表或数组进行排序, ...

  9. Java基础教程:面向对象编程[3]

    Java基础教程:面向对象编程[3] 内容大纲 基础编程 获取用户输入 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入.我们可以查看Ja ...

随机推荐

  1. zTree第二章,各种常见setting设置和方法

    具体详见API文档: http://www.treejs.cn/v3/api.php --------------------------------------------------------- ...

  2. 指针版P3690 【模板】Link Cut Tree (动态树)

    题面 传送门 题解 鉴于数组版实在是太慢我用指针版重新写了一遍 代码基本是借鉴了lxl某道关于\(LCT\)的题 //minamoto #include<bits/stdc++.h> #d ...

  3. 【javascript】判断是否微信浏览器的最佳实践

    根据判断UA中是否有关键字micromessenger,有的话则是微信内置浏览器 用Chrome的iPhone5模拟测试 //判断是否微信登陆 function isWeiXin() { var ua ...

  4. JSP里面九个内置对象

    JSP内置对象(9个常用的内置对象) 1.request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求, 然后做出响应.它是HttpServletRequest类的实例 ...

  5. 使HTML页面上获取到的文本保留空格和换行符等格式

    <pre> 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体.   <pre>的内容自动换行的问题(兼容多个浏览器): ...

  6. jQuery 属性操作attr().prop().text().html().val()

    这些方法用于获取和设置 DOM 元素的属性. 一.attr(): <!--样式:在style里面写的,用css来操作.--> <!--属性:在元素里面写的,用attr方法操作.--& ...

  7. JSP中使用JSTL表达式

    最近写web项目,为了使JSP代码美观好维护,决定采用EL&JSTL表达式.    EL表达式直接就可以用,但是JSTL表达式是属于apache的一个开源库,这个用起来就需要倒入一些jar包之 ...

  8. Codeforces Round #555 (Div. 3) C2. Increasing Subsequence (hard version)【模拟】

    一 题面 C2. Increasing Subsequence (hard version) 二 分析 需要思考清楚再写的一个题目,不能一看题目就上手,容易写错. 分以下几种情况: 1 左右两端数都小 ...

  9. 问题 I: 闪闪发光

    [提交] [状态] [命题人:外部导入] 题目描述 一所位于云南昆明的中医药本科院校--云南中医学院. 因为报考某专业的人数骤减,正面临着停招的危机. 其中有九名少女想到一条妙计——成为偶像, 只要她 ...

  10. [黑科技]跑的比fread还快的cin挂和cout挂

    CCPC赛后摸鱼搞了个新的奇怪外挂 这里贴上利用sgetn和sputn来实现的读入读出挂,理论上比fread更优 期望在赛中TLE的代码能强行卡过去hhh 利用小规模的Codeforces - 103 ...