一、数组(Array):相同类型数据的集合就叫数组。
二、数组定义: type[] 变量名 = new type[数组长度]; 例如定义长度为 10 的数组: int[] a = new int[10]; 或者 int a[] = new int[10];
三、数组中的元素索引是从 0 开始的。 对于数据来说,最大的索引 == 数组长度 -1。
四、定义数组的第3种方式:type[] 变量名 = {new type[]} {逗号分隔的初始化值列表};
五、 Java 中的每个数组都有一个名为 length 的属性,表示数组的长度。length 属性是 public,final,int 的。数组长度一旦确定,就不能改变大小。
六、 int[] a = new int[10],其中 a 是一个引用, 它指向了生成的数组对象的首地址,数组中每个元素都是 int 类型, 其中仅存放数值本身。
//Array
public class ArrayTest{
public static void main(String[] args){
/* 第一种定义方式
int[] a = new int[4]; //有new关键字说明生产了对象,所以数组属于引用数据类型。
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
System.out.println(a[2]);
*/
// 第二种定义方式
int a[] = new int[2]; //第一种方式较好。因为int[]是作为一个整体,意思也就是是定义了一个int[] 这种类型的变量a.
a[0] = 1;
a[1] = 2;
System.out.println(a[1]);
//第三种定义方式
int[] b = {1, 2, 3, 4};
System.out.println(b[2]);
int[] c = new int[]{1,2,3,4};
System.out.println(b[3]);
//length 属性
int[] d = new int[10];
for(int i = 0; i < d.length; i++){
d[i] = i + 1;
System.out.println(d[i]);
}
//数组默认初始值
int[] e = new int[4];
System.out.println(e[3]); // 0
boolean[] f = new boolean[3];
System.out.println(f[2]); //false
//数组比较
int[] g = {1, 2, 3};
int[] h = {1, 2, 3};
System.out.println(g.equals(h)); //false.这个equals()方法是继承Object,数组并没有 override这个方法,比较的是地址,而不是内容。
}
}
//引用数据类型
public class ArrayTest2{
public static void main(String[] args){
Person[] p = new Person[3]; //声明Person类型数组。没有生成对象,生成了3个引用,p还是指向首地址
System.out.println(p[0]); //引用类型成员变量初值null
p[0] = new Person(10); //p[0]引用保存的new返回的地址
p[1] = new Person(20);
p[2] = new Person(30);
for(int i = 0; i < p.length; i++){
System.out.println(p[i].age);
}
Person[] p2 = new Person[5];
for(int i = 0; i < p2.length; i++){
System.out.println(p2[i]);
}
}
}
class Person{
int age;
public Person(int age){
this.age = age;
}
}
public class ArrayTest3{
public static void main(String[] args){
Student[] s = new Student[10];
for(int i = 0; i < s.length; i++){
s[i] = new Student();
s[i].name = i % 2 == 0 ? "zhangsan":"lisi";
}
for(int i = 0; i < s.length; i++){
System.out.println(s[i].name);
}
}
}
class Student{
String name;
}
七、二维数组。二维数组是一种平面的二维结构,本质上是数组的数组。 二维数组的定义方式:type[][] a = new type[2][3];
//二维数组
public class ArrayTest4{
public static void main(String[] args){
int[][] a = new int[2][3];
System.out.println(a instanceof Object);
System.out.println(a[0] instanceof int[]); //验证i[0]是一个整型数组
int m = 0;
for(int i = 0; i < 2; i++){
for(int j = 0; j < 3; j++){
m++;
a[i][j] = 2 * m;
System.out.print(a[i][j] + " ");
}
System.out.println();
}
}
}
//不规则数组
public class ArrayTest6{
public static void main(String[] args){
/*
int[][] a = new int[3][];
a[0] = new int[2];
a[1] = new int[3];
a[2] = new int[1];
*/
// int[][] b = new int[][3]; //Error
int[][] b = new int[][]{ {1, 2, 3}, {4}, {5, 6, 7, 8} };
for(int i = 0; i < b.length; i++){
for(int j = 0; j < b[i].length; j++){
System.out.print(b[i][j]+ " ");
}
System.out.println();
}
}
}
Example:
//元素互换
public class Swap3{
public static void swap(char[] ch, char c){
ch[0] = 'C'; //ch引用指向数组a的首地址
c = 'D';
}
public static void main(String[] args){
char[] a = {'A', 'B'};
swap(a, a[1]); //传递数组的引用,和数组的第2个值
for(int i = 0; i < a.length; i++){
System.out.println(a[i]);
}
}
}