数组

 

6.1  数组的基本知识

6.1.1  声明数组变量

为了在程序中使用数组,必须声明一个引用数组的变量,并指明数组的元素类型。下面是声明数组的语法:

element[]  arrayRefVar; (元素类型[] 数组引用变量)

6.1.2  创建数组

不同于基本数据类型变量的声明,声明一个数组变量时并不在内存中给数组分配任何空间。下面这条语句做了两件事情:1)使用new elementType[arraySize]创建了一个数组;2)把这个新创建的数组的引用赋值给变量arrayRefVar。

arrayRefVar  =  new element[arraySize];(数组引用变量 = new 元素类型[数组大小])

声明一个数组变量、创建数组、然后将数组引用赋值给变量这三个步骤可以合并在一条语句里,如:

element[]  arrayRefVar = new element[arraySize];

(元素类型[] 数组引用变量 = new 元素类型[数组大小]

6.1.3  数组大小和默认值

当给数组分配空间时,必须通过指定该数组能够存储的元素个数来确定数组大小。创建数组之后就不能再修改它的大小。可以使用arrayRefVar.length求得数组的大小。例如:myList.length为10。

当创建数组后,它的元素被赋予默认值,数值型基本数据类型的默认值为0,char型的默认值为'\u0000',boolean型的默认值为false。

6.1.4  数组下标变量

数组元素可以通过下标访问。数组下标是基于0的,也就是说,其范围从0开始到arrayRefVar.length-1结束。数组中的每个元素都可以使用下面的语法表示,称为下标变量:

arrayRefVar[index]; (数组引用变量[下标];)

6.1.5  数组初始化语法

Java有一个简捷的记法,称作数组初始化语法,它使用下面的语法将声明数组、创建数组和初始化数组结合到一条语句中:

element[]  arrayRefVar = {value0, value1, ... , valuek};

6.1.6  处理数组

处理数组元素时,经常会用到for循环,理由有以下两点:

1)数组中所有元素都是同一类型的。可以使用循环以同样的方式反复处理这些元素。

2)由于数组的大小是已知的,所以很自然地就使用for循环。

假设创建如下数组:

double[] myList = new double[10];

下面是一些处理数组的例子:

        // 1.使用输入值初始化数组
        Scanner input = new Scanner(System.in);
        System.out.println("Enter" + myList.length + "values:");
        for (int i = 0; i < myList.length; i++) {
            myList[i] = input.nextDouble();
        }

        // 2.使用随机数初始化数组
        for (int i = 0; i < myList.length; i++) {
            myList[i] = Math.random() * 100;
        }

        // 3.显示数组
        for (int i = 0; i < myList.length; i++) {
            System.out.println(myList[i] + " ");
        }

        // char[]类型的数组
        char[] city = { 'H', 'e', 'l', 'l', 'o' };
        System.out.println(city);

        // 4.对所有元素求和
        double total = 0;
        for (int i = 0; i < myList.length; i++) {
            total += myList[i];
        }

        // 5.找出最大元素
        double max = myList[0];
        for (int i = 0; i < myList.length; i++) {
            if (myList[i] > max)
                max = myList[i];
        }

        // 6.找出最大元素的最小下标值
        double max1 = myList[0];
        int indexOfMax = 0;
        for (int i = 1; i < myList.length; i++) {
            if (myList[i] > max1)
                max1 = myList[i];
        }

        // 7.随意打乱
        for (int i = 0; i < myList.length; i++) {
            // 随意产生一个下标j(index)
            int index = (int) (Math.random() * myList.length);

            // 将myList[i]和myList[j]互换
            double temp = myList[i];
            myList[i] = myList[index];
            myList[index] = temp;
        }

        // 8.移动元素
        int n = 10;
        double temp = myList[n];

        for (int i = n + 1; i < myList.length; i++) {
            myList[i - 1] = myList[i];
        }

        myList[myList.length - 1] = temp;  

        // 9.打印数组
        System.out.println(Arrays.toString(myList));

6.1.7  for-each循环

Java支持一个简单的for循环,称之为for-each循环或增强型for循环,不使用下标变量就可以顺利地遍历整个数组。通常,for-each循环的语法为:

for(elementType element: arrayRefVar){}

      

     // for-each循环

       for (double u : myList) {

           System.out.println(u);

       }

 

6.2  数组的复制

在Java中,可以使用赋值语句复制基本数据类型,但是不能复制数组。将一个数组变量赋值给另一个数组变量,实际上是将一个数组的引用复制给另一个变量,使两个变量都指向相同的内存地址。

复制数组有三种方法:

1)使用循环语句逐个地复制数组的元素。

2)使用System类中的静态方法arraycopy。

3)使用clone方法复制数组。

可以使用循环将源数组中的每个元素复制到目标数组中的对应元素。例如,下述代码使用for循环将sourceArray复制到targetArray:

      

       // 使用for循环复制数组

       int[] sourceArray = { 2, 3, 1, 5, 10 };

       int[] targetArray = new int[sourceArray.length];

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

           targetArray[i] = sourceArray[i];

       } 

 

另一种方法是使用java.lang.System类的arraycopy方法复制数组,而不是使用循环。Arraycopy的语法如下所示:

 

6.3  给方法传递数组

6.4  从方法中返回数组

6.5  可变长参数列表

6.6  数组的查找

6.6.1  线性查找法

6.6.2  二分查找法

6.7  数组的排序

6.8  Arrays类

    

posted @ 2016-08-25 19:47  大大鹏  阅读(708)  评论(0编辑  收藏  举报