首页 > 代码库 > Java中的数组
Java中的数组
在java语言中,数组是一种最简单的使用频率很高的复合数据类型。数组是有序数据的集合与java中的集合略有不同,数组中的每个元素具有相同的数据类型,既可以用来存储基本类型的数据,也可以用用来存储引用数据类型的数据。可以用一个统一的数组名和下标来唯一地确定数组中的元素。值得注意的是:数组本身就是一种引用类型,例如 int是一种基本类型,但是int[]确是一种引用类型,数组有一维数组和多维数组。
一维数组:
1. 一维数组的定义
type[] arrayName;
类型(type)可以为Java中任意的数据类型,包括简单类型和复合类型。
例如:
int[] intArray;
Date[] dateArray;
有的时候我们也会看到这样一种定义方式 type arrayName[ ];这种方式不推荐使用。。。
2.一维数组的初始化
2.1 静态初始化:初始时有程序员显示的指定每个数组元素的初始值,有系统来决定数组的长度
int[] arr;
arr = new int[]{1,2,3,4};简写格式如下:int[] intArray={1,2,3,4};
String[] stringArray={"a", "b", "c"};
2.2 动态初始化:初始化时程序员只指定数组的长度,有系统来给那些数组中的元素分配初始值
1)简单类型的数组
int[] intArray;
intArray = new int[5];
2)复合类型的数组
String[] stringArray;
String stringArray = new String[3];/*为数组中每个元素开辟引用
空间(32位) */
stringArray[0]= new String("a");//为第一个数组元素开辟空间
stringArray[1]= new String("b");//为第二个数组元素开辟空间
stringArray[2]= new String("c");// 为第三个数组元素开辟空间
3.一维数组元素的引用
数组元素的引用方式为:
arrayName[index]
index为数组下标,它可以为整型常数或表达式,下标从0开始。每个数组都有一个属性length指明它的长度,例如:intArray.length指明数组intArray的长度。
多维数组:
在Java中其实多维数组就是在数组之中嵌套数组,其实和很多其他语言是一样的比如js,AS3,C等等。
1.二维数组的定义
type[][] arrayName;
2.二维数组的初始化
2.1静态初始化
int[][] intArray={{1,2},{2,3},{3,4,5}};
Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。
2.2 动态初始化
1) 直接为每一维分配空间,格式如下:
arrayName = new type[arrayLength1][arrayLength2];
int[][] a = new int[2][3];
2) 从最高维开始,分别为每一维分配空间:
arrayName = new type[arrayLength1][ ];
arrayName[0] = new type[arrayLength20];
arrayName[1] = new type[arrayLength21];
…
arrayName[arrayLength1-1] = new type[arrayLength2n];
3) 例:
二维简单数据类型数组的动态初始化如下,
int[][] a = new int[2][ ];
a[0] = new int[3];
a[1] = new int[5];
对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。
而且,必须为每个数组元素单独分配空间。
例如:
String[][] s = new String[2][ ];
s[0]= new String[2];//为最高维分配引用空间
s[1]= new String[2]; //为最高维分配引用空间
s[0][0]= new String("Good");// 为每个数组元素单独分配空间
s[0][1]= new String("Luck");// 为每个数组元素单独分配空间
s[1][0]= new String("to");// 为每个数组元素单独分配空间
s[1][1]= new String("You");// 为每个数组元素单独分配空间
3.二维数组元素的引用
对二维数组中的每个元素,引用方式为:arrayName[index1][index2]
例如: num[1][0];
4.二维数组举例:
规则二维数组:
public class Study {
public static void main(String args[]) {
int[][] a = {{1, 2}, {3, 4},{5, 6}};
for(int i = 0; i<a.length; i++){
for(int j = 0; j<a[i].length; j++){
System.out.println(a[i][j]);
}
}
}
}
不规则二维数组:
public class Study {
public static void main(String args[]) {
int[][] b = {{1, 2}, {3, 4, 5},{5, 6, 7, 8}};
for(int i = 0; i<b.length; i++){
for(int j = 0; j<b[i].length; j++){
System.out.println(b[i][j]);
}
}
}
}
数组重要方法:
一、填充数组:Arrays.fill()方法
缺点:填充的数据单一。
用法1:接受2个参数
Arrays.fill( a1, value );
注:a1是一个数组变量,value是一个a1中元素数据类型的值,作用:填充a1数组中的每个元素都是value
例如:
public class Study {
public static void main(String[] args) {
int[] a = new int[5];
Arrays.fill(a, 1);
for (int i : a) {
System.out.println(i);
}
}
}
用法2:接受4个参数
第一个参数指操作的数组,第二个和第三个指在该数组的某个区域插入第四个参数,第二个参数指起始元素下标(包含该下标),第三个参数指结束下标(不包含该下标),注意:java的数组下标从0开始
例如:
public class Study {
public static void main(String[] args) {
int[] a = new int[5];
Arrays.fill(a, 1);
Arrays.fill(a, 1, 3, 2);
for (int i : a) {
System.out.println(i);
}
}
}
二、复制数组:clone()方法
clone()方法,限制:全部复制,无法部分的复制。
public class Study {
public static void main(String[] args) {
int[] a = new int[5];
int[] b;
Arrays.fill(a, 1);
b = a.clone();
for (int i : b) {
System.out.println(i);
}
}
}
三、比较数组:Arrays.equala()方法
comparable接口:compareTo()方法 , 实现comparable接口的类有了自身的比较功能
comparator接口:compare()方法和equals()方法
一般只需实现compare()方法 用于编写自定义的比较方法
例子:
定义Person类,对该类进行比较
public class Person {
String firstname, lastname;
Boolean sex;
int age;
public Person(String firstname, String lastname, Boolean sex, Integer age) {
super();
this.firstname = firstname;
this.lastname = lastname;
this.sex = sex;
this.age = age;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public Boolean getSex() {
return sex;
}
public void setSex(Boolean sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
实现Comparator,定义自定义比较器
import java.util.Comparator;
public class PersonComparator implements Comparator<Person> {
@Override
public int compare(Person arg0, Person arg1) {
if (arg0.getAge() > arg1.getAge()) {
return -1;
}
return 1;
}
}
测试比较器
public class Study {
public static void main(String[] args) {
Person[] p = {
new Person("ouyang", "feng", Boolean.TRUE, 27),
new Person("zhuang", "gw", Boolean.TRUE, 26),
new Person("zhuang", "gw", Boolean.FALSE, 28),
new Person("zhuang", "gw", Boolean.FALSE, 24)};
Arrays.sort(p, new PersonComparator());
for (Person person : p) {
System.out.println(person.getFirstname());
System.out.println(person.getLastname());
System.out.println(person.getAge());
System.out.println(person.getSex());
System.out.println();
}
}
}
四、数组排序:Arrays.sort()方法
五、查找数组:Arrays.binarySearch()方法
缺点:数组必须已经过了排序,否则结果无法预料
public class Study {
public static void main(String[] args) {
int[] a = {1, 2, 4, 5, 3};
Arrays.sort(a);
System.out.println(Arrays.binarySearch(a, 3));
}
}
六、显示数组数据
1)数组存放的是对象,如字符串:可以使用Arrays.asList方法将数组转换为List容器后显示。
2)数据是基本类型:可以使用for(int i:array) System.out.println(i); 显示
3)Arrays.toString()方法
public class Study {
public static void main(String[] args) {
int[] a = {1, 2, 4, 5, 3, 1};
System.out.println(Arrays.toString(a));
for (int i : a) {
System.out.println(i);
}
}
}
Java中的数组