服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java数组特点及基本使用技巧

1.关于数组的特点

1)在java中,无论使用数组或容器,都有边界检查。如果越界操作就会得到一个runtimeexception异常。

2)数组只能保存特定类型。数组可以保存基本类型,容器则不能。容器不以具体的类型来处理对象,它们将所有对象都按object类型处理。

3)容器类只能保存对象的引用。而数组既可以创建为直接保存基本类型,也可以保存对象的引用。在容器中可以使用包装类,如integer、double等来实现保存基本数据类型值。

4)对象数组和基本类型数组在使用上几乎是相同的;唯一的区别是对象数组保存的是引用,基本类型数组保存基本类型的值。

2.关于数组定义

1)数组在定义时,不能分配空间。只有定义完后,可以给数组分配空间。

int num[];

num=new int[3];



int num[]=new int[3];

注意

int [] num=new int[]{1,2,3}; //ok

int [] num=new int[3]{1,2,3}; //error;

2)可以这样定义二维数组。

int [][] num;

//or

num=new int[3][];

num[0]=new int[5];

num[1]=new int[3];

num[2]=new int[2];

3)二维数组赋初值。

int [][] num=new int[][]{1,2,3,4,5,5}; //error
int [][] num=new int[][]{{1,2,3},{4,5,5}}; //ok
int [][] num=new int[2][]{{1,2,3},{4,5,5}}; //error
int [][] num={{1,2,3},{4,5,6}}; //ok

3.关于数组初始化

对象数组在创建之初会自动初始化成null,由原始数据类型构成的数组会自动初始化成零(针对数值类型),(char)0 (针对字符类型)或者false (针对布尔类型)。

4.数组有关引用的问题

int[] a1 = { 1, 2, 3, 4, 5 };

int[] a2;

a2 = a1;//这里只是复制了一个引用

看以下代码:

public class arrays {
public static void main(string[] args) {
int[] a1 = { 1, 2, 3, 4, 5 };
for (int i = 0; i < a1.length; i++)
system.out.println("a1[" + i + "] = " + a1);
int[] a2;
a2 = a1;
for (int i = 0; i < a2.length; i++)
a2++;
system.out.println("-----after change a2------");
for (int i = 0; i < a1.length; i++)
system.out.println("a1[" + i + "] = " + a1);
system.out.println("-----after change a2[0]------");
a2[0] = 333;
system.out.println("a2[0]=" + a2[0]);
system.out.println("a1[0]=" + a1[0]);
system.out.println("----- a2------");
for (int i = 0; i < a2.length; i++)
system.out.println("a2[" + i + "] = " + a2);
}



结果:

a1[0] = 1

a1[1] = 2

a1[2] = 3

a1[3] = 4

a1[4] = 5

-----after change a2------

a1[0] = 2

a1[1] = 3

a1[2] = 4

a1[3] = 5

a1[4] = 6

-----after change a2[0]------

a2[0]=333

a1[0]=333

----- a2------

a2[0] = 333

a2[1] = 3

a2[2] = 4

a2[3] = 5

a2[4] = 6

数组a1和a2始终在操作同一个对象。

5.关于数组的相关操作

1)在java中,所有的数组都有一个缺省的属性length,用于获取数组中元素的个数。

2)数组的复制:system.arraycopy()。

3)数组的排序:arrays.sort()。

4)在已排序的数组中查找某个元素:arrays.binarysearch()。

6.关于数组的排序操作

1)对象数组排序,必须实现comparable接口。

import java.util.arrays;
class student implements comparable {
int num;
string name;

student(int num, string name) {
this.num = num;
this.name = name;
}

public string tostring()// 重写tostring()方法,以便main:system.out.println(ss);
{
return "number=" + num + "," + "name=" + name;
}

public int compareto(object o) {
student s = (student) o;
return num > s.num ? 1 : (num == s.num ? 0 : -1);
}
}

class arraytest {
public static void main(string[] args) {
student[] ss = new student[] { new student(1, "zhangsan"),
new student(2, "lisi"), new student(3, "wangwu") };
arrays.sort(ss);
for (int i = 0; i < ss.length; i++) {
system.out.println(ss);
}
}
}


结果:

number=1,name=zhangsan

number=2,name=lisi

number=3,name=wangwu

2)以num为第一关键字,name为第二关键字排序

import java.util.arrays;

class student implements comparable {
int num;
string name;

student(int num, string name) {
this.num = num;
this.name = name;
}

public string tostring() {
return "number=" + num + "," + "name=" + name;
}

public int compareto(object o) {
student s = (student) o;
int result = num > s.num ? 1 : (num == s.num ? 0 : -1);
if (0 == result) {
result = name.compareto(s.name);
}
return result;
}
}

class arraytest {
public static void main(string[] args) {
student[] ss = new student[] { new student(1, "zhangsan"),
new student(2, "lisi"), new student(3, "wangwu"),
new student(3, "mybole") };
arrays.sort(ss);
for (int i = 0; i < ss.length; i++) {
system.out.println(ss);
}
}
}


结果:

number=1,name=zhangsan

number=2,name=lisi

number=3,name=mybole

number=3,name=wangwu

7.关于java.util.arrays

1)java.util.class arrays’s architecture

java.lang.object

|

+--java.util.arrays

2)说明

     这个类提供的基本上都是静态方法,用户进行数组操作,binarysearch():数组中特定元素的寻找,equals():比较两个数组是否相等(在相同位置上的元素是否相等),fill():数组填充,sort():数组排序。

扫描关注微信公众号