1.数组(Array)的性质

1.1 数组是线性序列的

1.2 数组是一种效率最高的存储和访问对象引用序列的方式。

1.3 数组的数组对象大小是被固定的

1.4 数组实质上保存的是引用(指向在堆中创建的一个真实对象)

2.返回一个数组

public class ArrayTest {
    public static void main(String[] args) {
        sardine A=new sardine();
        for(int i=0;i<A.getArray().length;i++){
            System.out.println("返回的数组:"+A.getArray()[i]);
        }
    }
}
class sardine {
    public String[] getArray() {
        String[] Array0 = {"沙", "丁", "鱼", "flat"};
        return Array0;
    }
}

array_agg后java用什么来接_泛型

返回一个数组,注意:方法的返回类型要为数组类型 

3.多维数组

public String[][] MultidimensionalArray() {
        String[][] Array1 = {
                {"沙", "丁", "鱼", "flat"},
                {"剑", "鱼", "flat"},
                {"比", "目", "鱼", "flat"},
        };
        return Array1;
    }

多维数组,在我理解就是套了几层数组的数组。 

4.数组与泛型

数组不支持泛型的,严格来说是没法实例化具有参数类型的数组:

array_agg后java用什么来接_array_agg后java用什么来接_02

这里你可以看出编译时,AA实例化的是new List[10]是成功的,但AAAA实例化new List<sardine>[10]却是失败的。

这样的原因就是因为实例化数组时,会擦除(也就是之前泛型章讲的移除参数类型),而数字同时必须知道确切的类型保证类型安全。

不过你也可以使用下面这个方法取巧地通过实例化。(创建非泛型数组后,在转型成泛型数组)

array_agg后java用什么来接_泛型_03

 

5.创建测试数据

这里主要介绍了标准类库Arrays里面的一个fill方法

array_agg后java用什么来接_array_agg后java用什么来接_04

int[] a1= new int[5];
        boolean[] a2=new boolean[2];
        String[] a3=new String[4];
        float[] a4=new float[5];
        Arrays.fill(a1,1);
        Arrays.fill(a2,true);
        Arrays.fill(a3,"沙");
        System.out.println("String数组a3 第一次:"+Arrays.toString(a3));
        Arrays.fill(a3,1,2,"丁");
        Arrays.fill(a3,2,3,"鱼");
        Arrays.fill(a3,3,4,"flat");
        Arrays.fill(a4,2.1f);
        System.out.println("int数组a1:"+Arrays.toString(a1));
        System.out.println("boolean数组a2:"+Arrays.toString(a2));
        System.out.println("String数组a3 第二次:"+Arrays.toString(a3));
        System.out.println("float数组a4:"+Arrays.toString(a4));

array_agg后java用什么来接_System_05

这个fill方法其实蛮鸡肋的,只能用一个值来填充各个位置,要修改的时候也是要写fill加两个参数设定一个范围来填充。

注意:这个方法虽然也可以填充对象,但是对象也是填充到各个位置的,不要妄想填个数组对象进去,就能把数组里的东西也分开填充,这是不行的。

6.Arrays的实用功能

这里它首先介绍了一个不是Arrays但也很有用的方法

6.1 复制数组-用System.arraycopy()方法

String[] copyArrays=new String[3];
        System.arraycopy(A.getArray(),0,copyArrays,0,copyArrays.length);
        System.out.println("复制数组:"+Arrays.toString(copyArrays));

array_agg后java用什么来接_泛型_06

可以发现,System.arraycopy(要复制的数组对象,开始的下标,要被赋予的数组对象,开始的下标,要复制的长度) 

6.2 数组比较-Arrays.equals()方法。

array_agg后java用什么来接_泛型_07

array_agg后java用什么来接_array_agg后java用什么来接_08

Arrays.equals(数组1,数组2);

这里相等的条件是数组的元素个数相同且对应位置的元素也相同。相同返回true,不同返回false. 

6.3数组排序+数组元素比较 -实现comparable接口 

6.4在已排序的数组中查找-使用Arrays.binarySearch()方法

Arrays.sort(copyArrays);
        int location=Arrays.binarySearch(copyArrays,"沙");
        System.out.println("数组中沙的位置:"+location);

array_agg后java用什么来接_array_agg后java用什么来接_09

Arrays.binarySearch(数组,要找的元素) 找到元素返回大于等于0,找不到返回负数

这里注意先决条件:要已排序,无排序会返回负数(表示找不到)