woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

新手入门:Java数组特点及基本使用技巧

1.关于数组的特点

 

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

 

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

 

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

 

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[i]);

       int[] a2;

       a2 = a1;

       for (int i = 0; i < a2.length; i++)

           a2[i]++;

       System.out.println("-----after change a2------");

       for (int i = 0; i < a1.length; i++)

           System.out.println("a1[" + i + "] = " + a1[i]);

       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[i]);

    }

}

 

 

结果:

 

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

 

数组a1a2始终在操作同一个对象。

 

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[i]);

    {

       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[i]);

       }

    }

}

 

 

结果:

 

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[i]);

       }

    }

}

 

 

结果:

 

number=1,name=zhangsan

 

number=2,name=lisi

 

number=3,name=mybole

 

number=3,name=wangwu

 

7.关于java.util.Arrays

 

1java.util.Class Arrayss architecture

 

java.lang.Object

 

|

 

+--java.util.Arrays

 

2)说明

 

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

posted on 2009-08-10 14:37 肥仔 阅读(274) 评论(0)  编辑 收藏 引用 所属分类: Web-后台


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理