• Java学习树--4数组的学习


    数组的声明

        int[] a;
        short[][] as;
        short s,aas[][]; //但通常将[][]放在变量之前
        Object[] ao,aos;
        Collection<?>[] u; //声明具体元素类型未知的数组
    

    数组的创建

    数组在创建之前,不能使用,数组的创建有两种,一种是直接使用创建表达式,指定数组的长度,另一个方式是直接对数组进行初始化。在数组创建后,能使用数组的final length变量访问数组的长度。

    Exception ae[] = new Exception[3];
    Object aao[][] = new Exception[2][3];
    int[] factorial = { 1, 1, 2, 6, 24, 120, 720, 5040 };
    char ac[] = { 'n', 'o', 't', ' ', 'a', ' ','S', 't', 'r', 'i', 'n', 'g' };
    String[] aas = { "array", "of", "String", };
    ae.length //创建的数组能访问.length属性 
    

    数组的访问

    int [] a={1,2,3}
    a[0]=2;
    a[2]=2;
    for(int x:a){System.out.Println(x); } //2 2 2

    如果数组的访问出界,会抛出ArrayIndexOutOfBoundsException。

    数组的存储异常

    ArrayStoreException,数组的创建类型和存储类型不一致引发的异常。

    
    class Point { int x, y; }
    class ColoredPoint extends Point { int color; }
    class Test {
    public static void main(String[] args) {
    ColoredPoint[] cpa = new ColoredPoint[10];
    Point[] pa = cpa;
    System.out.println(pa[1] == null);
    try {
    pa[0] = new Point(); //实际声明类型是子类型引用
    } catch (ArrayStoreException e) {
    System.out.println(e);
    }
    }
    }
    //This program produces the output:
    //true
    //java.lang.ArrayStoreException: Point
    

    数组的复制

    数组的复制最常规的方法之一,当然就是直接使用for循环。

    对于一维数组可以使用 clone()方法,次方法复制的数组是深拷贝

     int[] a={1,2};
            int[] b=a.clone();
            System.out.println(a==b); //fasle
            b[1]++;
            System.out.println(b[1]); //3
            System.out.println(a[1]); //2
    

    System.arraycopy(src,srcPos,dest,destPos,length);
    src:原数组
    srcPos:从原数组的起始位置+
    dest:目标数组
    destPos:目标数组开始的的位置
    length:要Copy的数组长度


    Arrays.copyOf(original, newLength);//返回一个新的数组 coriginal:原数组 newLength:新数组的长度 注意:1. 新数组的长度   如果写的比原数组的长度小,那就只复制到哪里   如果写的比原数组的长度长,没复制的地方,会是默认值

    注意以上的方法都是一维数组的复制方式,也只适用一维数组,其他维数组的复制方式是拆分成为一维数组在进行复制。
    数组的拼接也可以借助数组的复制实现

    数组的辅助类Arrays

    常需要用到的方法


    Arrays.copyOf() Arrays.copyOfRange([]origin,from,to) 这两个静态方法实现了全部的基本数据类型数组的复制,后者是数组的范围复制


    Arrays.binarySearch([]array,key) Arrays.binarySearch([]array,from,to,key) 使用了二分查找算法实现数组内元素的查找和范围查询,这个方法实现了泛型T,借助比较器也能使用查询方法。


    Arrays.compare([]a,[]b) 比较两个数组语序上是否相等,如果返回0,表面数组相等,返回1,代表数组a大


    Arrays.equals([]a,[]b) Arrays.equals(a, b) == (Arrays.compare(a, b) == 0);Arrays.equals(a, b) 返回真,那么Arrays.hashCode(a) == Arrays.hashCode(b).


    Arrays.fill([]a,key) 用key填充数组,也有范围填充重载


    Arrays.sort([]a) 数组排序,也可以进行范围内的数组排序


    Arrays.mismatch([]a,[]b) 比较两个数组语序上的差异,如果数组相等返回-1,返回两个数组开始不同的第一个索引。索引的范围是0到最小数组的长度,这个方法可以计算两个数组的相同前缀,前缀长度就是返回值

  • 相关阅读:
    2019-2020-1 20199310《Linux内核原理与分析》第九周作业
    2019-2020-1 20199310《Linux内核原理与分析》第八周作业
    Android开发笔记(十七)——Fragment详解
    Android开发笔记(十六)——Activity的4种启动模式
    Android开发笔记(十五)——Activity的跳转和数据传递
    Android开发笔记(十四)——Activity的生命周期
    Android开发笔记(十三)——Activity的创建三部曲
    Android实战开发——News
    Android开发笔记(十二)——WebView
    Android开发笔记(十一)——ScrollView滚动视图
  • 原文地址:https://www.cnblogs.com/lin7155/p/14851363.html
Copyright © 2020-2023  润新知