Java中的数组

1. 使用用Java中的数组,必须要经过声明数组和分配内存给该数组两个步骤(定义时就初始化除外)。

int a[] = null;
a = new int[10];

int[] a = null;
a = new int[10];

int a[] = new int[10];

其中 null 表示的是引用类型的默认值,数组是引用类型,null表示目前还没有任何指向的内存空间。

2. Java中获取数组的长度可以使用 <数组名>.length 的形式,若是多维数组,获取下一维数组的长度可以使用 <数组名[i]>.length 的形式。

3. Java中的数组也可以静态初始化

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

4. Java中的二维数组

int b[][];
b = new int[4][3]; //4行3列

int b[][] = new int[4][3];

5. Java中的二维数组的初始化

int b[][] = {{row 1}, {row 2}, {row n}};

6. 二维数组Demo

public class Array {
    public static void main(String args[]) {
        int score[][] = {{80, 90}, {10, 20, 30, 40, 50}, {60, 70, 100}};
        for (int i = 0; i < score.length; i++) {
            for (int j = 0; j < score[i].length; j++) { //注意这里的score[i].length
                System.out.print(score[i][j] + "\t");
            }
            System.out.println("");
        }
    }
}

# java Array 
80    90    
10    20    30    40    50    
60    70    100    

7. Java中的多维数组

int c[][][] = new int[3][4][5]; //更多维依次类推

8. Java中的数组传递与返回

public class Array {
    public static void main(String args[]) {
        int score[]= {10, 20, 30, 40, 50, 60};
        int tmp[] = changeScore(score);
        for (int i = 0; i < score.length; i++) {
            System.out.print(score[i] + "\t");
        }
        System.out.println("");

        for (int i = 0; i < tmp.length; i++) {
            System.out.print(tmp[i] + "\t");
        }
        System.out.println("");
    }

    public static int[] changeScore(int a[]) {
        for (int i = 0; i < a.length; i++) {
            a[i] = 100;
        }
        return a;
    }
}

# java Array 
100    100    100    100    100    100    
100    100    100    100    100    100    

Java中的数组不用传长度参数了,自带长度属性。应该也不会出现像C中的传参退化的表现。

直接在函数内定义并初始化数组后返回这个数组,在Java代码中应该也是安全的,毕竟数组元素都在堆空间上,和C有较大区别。

public class Array {
    public static void main(String args[]) {
        int dst[] = func();
        for (int i = 0; i < dst.length; i++) {
            System.out.print(dst[i] + "\t");
        }
        System.out.println("");
    }

    public static int[] func() {
        int src[]= {10, 20, 30, 40, 50, 60};
        return src;
    }
}

# java Array 
10    20    30    40    50    60

9. Java类库中完成数组排序与拷贝的方法

public class Array {
    public static void main(String args[]) {
        int score[]= {10, 20, 60, 30, 50, 40};
        java.util.Arrays.sort(score); //不需要import直接可以使用
        for (int i = 0; i < score.length; i++) {
            System.out.print(score[i] + "\t");
        }
        System.out.println("");
    }
}

# java Array 
10    20    30    40    50    60
public class Array {
    public static void main(String args[]) {
        int src[]= {10, 20, 30, 40, 50, 60};
        int dst[]= {11, 22, 33, 44, 55, 66};
        System.arraycopy(src, 1, dst, 2, 4); //将src的下标1开始拷贝4个元素到dst下标为4的位置
        for (int i = 0; i < dst.length; i++) {
            System.out.print(dst[i] + "\t");
        }
        System.out.println("");
    }
}

# java Array 
11    22    20    30    40    50    

Java为开发者提供了各种各样的支持,这些类库在 Java Doc 中可以查找到。

10. Java新特性——可变参数

public class Array {
    public static void main(String args[]) {
        func(10, 20);
        func(10, 20, 30, 40);
    }

    public static void func(int... arg) { //(<type>... <参数列表名>)
        for (int i = 0; i < arg.length; i++) {
            System.out.print(arg[i] + "\t");
        }
        System.out.println("");
    }
}

# java Array 
10    20    
10    20    30    40    

和传数组同样的效果,只不过传参方式不同。

11. Java新特性——foreach输出

public class Array {
    public static void main(String args[]) {
        int src[]= {10, 20, 30, 40, 50, 60};
        func(src);
    }

    public static void func(int arg[]) {
        for (int value : arg) {
            System.out.print(value + "\t"); //此时直接是值,而不是下标了
        }
        System.out.println("");
    }
}

# java Array 
10    20    30    40    50    60    

补充:禁止在 foreach 循环里面对元素进行 remove/add 操作,因为可能导致崩溃现象。remove 元素必须使用 Iterator 方式,如果是并发操作,需要对 Iterator 对象加锁。

 

参考《Java开发实战经典》

posted on 2021-09-30 02:24  Hello-World3  阅读(66)  评论(0编辑  收藏  举报

导航