数组本质上是相同数据类型的元素的集合。例如。整形数组中包含的元素每个元素都是int类型,浮点数数组中包含的每个元素都是float类型。
声明数组
声明数组的语法如下:
type[] arrayName;
声明整形数组如下:
int [] numbers;
声明float类型数组:
float [] floatNumbers
创建数组
int [] numbers;
numbers=new int[10];
- 第一条语句声明了一个数组类型变量
- 第二天语句为保存10个整数分配了连续的内存,并将首个元素的内存地址赋给了变量numbers。
访问和修改数组元素
使用索引来访问数组元素。数组每个元素都拥有一个唯一的索引值。索引从0开始。
numbers[0]
numbers[1]
numbers[2]
索引值5是违法的,访问数组边界之外的元素引发异常。
一个int类型占用4个字节的内存。如图
初始化数组
运行时初始化
使用数组字面量的初始化
数组用法
public class TestScoreAverage {
public static void main(String[] args) {
final int NUMBER_OF_STUDENTS = 5;
//final 关键字在程序中创建常量,变量被声明后值不可以再此被改变
int[] marks = new int[NUMBER_OF_STUDENTS];
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < NUMBER_OF_STUDENTS; i++) {
System.out.print("Enter marks for student #" + (i + 1) + ": ");
String str = reader.readLine();
marks[i] = Integer.parseInt(str);
}
} catch (Exception e) {
e.printStackTrace();
}
int total = 0;
for (int i = 0; i < NUMBER_OF_STUDENTS; i++) {
total += marks[i];
}
System.out.println("Average Marks " + (float) total
/ NUMBER_OF_STUDENTS);
}
}
二维数组
二维数组可以别看做一张包含行和列的表格,其中每一个表格代表一个数组元素。
声明如下:
type[][] arrayName;
初始化
int [][] marks;
marks=new int [5][50];
marks[0][5]=78;
marks[2][10]=56;
二维数组使用
public class MultiDimArrayApp {
public static void main(String[] args) {
final int MAX_STUDENTS = 50, MAX_SUBJECTS = 3;
int[][] marks = new int[MAX_STUDENTS][MAX_SUBJECTS];
// Adding data to the array
for (int id = 0; id < MAX_STUDENTS; id++) {
for (int subject = 0; subject < MAX_SUBJECTS; subject++) {
marks[id][subject] = (int) (Math.random() * 100);
}
}
// Printing Array
System.out.print("Student\t");
for (int subject = 0; subject < MAX_SUBJECTS; subject++) {
System.out.print("\t" + "Subject " + subject + "\t");
}
System.out.println();
for (int id = 0; id < MAX_STUDENTS; id++) {
System.out.print("Student \t" + (id + 1) + '\t');
for (int subject = 0; subject < MAX_SUBJECTS; subject++) {
System.out.print("\t" + marks[id][subject] + "\t");
}
System.out.println();
}
}
}
交错数组(非矩形数组)
确定数组的长度
public class ArrayLengthApp {
public static void main(String[] args) {
final int SIZE = 5;
int[] integerArray = new int[SIZE];
float[] floatArray = {5.0f, 3.0f, 2.0f, 1.5f};
String[] weekDays = {"Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Saturday"};
int[][] jaggedArray = {
{5, 4},
{10, 15, 12, 15, 18},
{6, 9, 10},
{12, 5, 8, 11}
};
System.out.println("integerArray length: " + integerArray.length);
System.out.println("floatArray length: " + floatArray.length);
System.out.println("Number of days in a week: " + weekDays.length);
System.out.println("Length of jaggedArray: " + jaggedArray.length);
int row = 0;
for (int[] memberRow : jaggedArray) {
System.out.println("\tArray length for row "
+ ++row + ": " + memberRow.length);
}
}
}
复制数组
import java.util.Arrays;
public class ArrayCopyApp {
public static void main(String[] args) {
float[] floatArray = {5.0f, 3.0f, 2.0f, 1.5f};
float[] floatArrayCopy = floatArray.clone();
System.out.println(Arrays.toString(floatArray) + " - Original");
System.out.println(Arrays.toString(floatArrayCopy) + " - Copy");
System.out.println();
System.out.println("Modifying the second element of the original array");
floatArray[1] = 20;
System.out.println(Arrays.toString(floatArray)
+ " - Original after modification");
System.out.println(Arrays.toString(floatArrayCopy) + " - Copy");
System.out.println();
System.out.println("Modifying the third element of the copy array");
floatArrayCopy[2] = 30;
System.out.println(Arrays.toString(floatArray) + " - Original");
System.out.println(Arrays.toString(floatArrayCopy)
+ " - Copy array after modification");
}
}
找出数组类的表示
public class ArrayClassNameApp {
public static void main(String[] args) {
final int SIZE = 5;
int[] integerArray = new int[SIZE];
float[] floatArray = {5.0f, 3.0f, 2.0f, 1.5f};
String[] weekDays = {"Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Saturday"};
int[][] jaggedArray = {
{5, 4},
{10, 15, 12, 15, 18},
{6, 9, 10},
{12, 5, 8, 11}
};
Class cls = integerArray.getClass();
System.out.println(
"The class name of integerArray: " + cls.getName());
cls = floatArray.getClass();
System.out.println(
"The class name of floatArray: " + cls.getName());
cls = weekDays.getClass();
System.out.println(
"The class name of weekDays: " + cls.getName());
cls = jaggedArray.getClass();
System.out.println(
"The class name of jaggedArray: " + cls.getName());
System.out.println();
cls = cls.getSuperclass();
System.out.println(
"The super class of an array object: "
+ cls.getName());
}
}