• java数组


    数组定义

    用来存储固定大小的同类型元素,元素可以是基本数据类型,也可以是引用数据类型

    如何声明一个数组

    声明的方式有两种:

    type[] arrayName; //推荐的方式

    或者  

    type arrayName[]; //效果一样,但是不推荐,这种风格来自 C/C++ 语言 ,在Java中采用是为了让 C/C++ 程序员能够快速理解java语言

    其中,type 为Java中的任意数据类型,包括基本类型和引用类型,arrayName为数组名,必须是一个合法的标识符,[ ] 指明该变量是一个数组类型变量。

    与C、C++不同,Java在定义数组时并不为数组元素分配内存,因此[ ]中无需指定数组元素的个数,即数组长度。

    而且对于如上定义的一个数组是不能访问它的任何元素的,我们必须要为它分配内存空间,这时要用到运算符new,其格式如下:

    arrayName = new type[arraySize]; 

    其中,arraySize 为数组的长度,type 为数组的类型。如:

    intArray = new int[3];

    为一个整型数组分配3个int 型整数所占据的内存空间。

    通常,你可以在定义的同时分配空间,语法为:

    type[] arrayName = new type[arraySize];

    例如:

    int[] intArray = new int[3];

    数组的初始化

    在定义数组时只指定数组的长度,由系统自动为元素赋初值的方式称作动态初始化。

    在初始化数组时还有一种方式叫做静态初始化,就是在定义数组的同时就为数组的每个元素赋值。数组的静态初始化有两种方式,具体格式如下:

    1、类型[] 数组名 = new 类型[]{元素,元素,……};

    2、类型[] 数组名 = {元素,元素,元素,……};   

    上面的两种方式都可以实现数组的静态初始化,但是为了简便,建议采用第二种方式。

    // 静态初始化
    // 静态初始化的同时就为数组元素分配空间并赋值
    int[] intArray = {1,2,3,4};
    String[] stringArray = {"哈哈哈", "嘿嘿嘿", "呵呵呵"};
    // 动态初始化
    float[] floatArray = new float[3];
    floatArray[
    0] = 1.0f; floatArray[1] = 132.63f; floatArray[2] = 100F;
    int[] intArray = new int[10];

    数组引用

    可以通过下标来引用数组

    arrayName[index]; 

    每个数组都有一个length属性来指明它的长度,例如 intArray.length 指明数组 intArray 的长度。

    下标从0开始,下标的最大值为数组长度减1

    与C、C++不同,Java对数组元素要进行越界检查以保证安全性,若下标超过数组长度,则会抛出数组越界异常ArrayIndexOutOfBoundsException

     1    public class ArrayDemo06 {
     2        public static void main(String[] args) {
     3            int[] arr = new int[4]; // 定义一个长度为4的数组
     4            System.out.println("arr[0]=" + arr[4]); // 通过角标4访问数组元素,会抛出ArrayIndexOutOfBoundsException
     5        }
     6    }

    数组空指针异常NullPointerException

     1    public class ArrayDemo07 {
     2        public static void main(String[] args) {
     3            int[] arr = new int[3]; // 定义一个长度为3的数组
     4            arr[0] = 5; // 为数组的第一个元素赋值
     5            System.out.println("arr[0]=" + arr[0]); // 访问数组的元素
     6            arr = null; // 将变量arr置为null
     7            System.out.println("arr[0]=" + arr[0]); // 访问数组的元素,抛出NullPointerException
     8        }
     9    }

    数组的遍历

    1.使用for循环来遍历数组

    2.forech循环 -----”增强版“的for循环,专门用来遍历数组,

    二维数组

    数组中的元素也是一个数组

    二维数组的定义有很多方式,接下来针对几种常见的方式进行详细地讲解,具体如下:

    第一种方式:

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

    上面的代码相当于定义了一个3*4的二维数组,即二维数组的长度为3,二维数组中的每个元素又是一个长度为4的数组,接下来通过一个图来表示这种情况,如下图所示。

     

    第二种方式:

    int[][] arr = new int[3][];

    第二种方式和第一种类似,只是数组中每个元素的长度不确定,接下来通过一个图来表示这种情况,如下图所示。

     

    第三种方式:

    int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};

    上面的二维数组中定义了三个元素,这三个元素都是数组,分别为{1,2}、{3,4,5,6}、{7,8,9},接下来通过一个图来表示这种情况,如图2-54所示。

     

    对二维数组中元素的访问也是通过下标的方式,如需访问二维数组中第一个元素数组的第二个元素,具体代码如下:

    arr[0][1];

    二维数组的遍历

    public class ArrayDemo09 {
        public static void main(String[] args){
            //一维数组的求累加和并遍历
            int[] arr = {10,20,30,40,50};
            int sum = 0; 
            for (int i=0; i<arr.length; i++) {
             //System.out.println(arr[i]);
                sum += arr[i];
            }
            System.out.println("sum= " + sum);
            System.out.println("---------------------");
            
            //二维数组的求累加和并遍历
            int[][] arr2 = { {1,2},{3,4,5},{6,7,8,9,10} };
            int sum2 = 0;
            for (int i=0; i<arr2.length; i++) {
                for (int j=0; j<arr2[i].length; j++) {
                     //System.out.println(arr2[i][j])
                    sum2 += arr2[i][j];
                }
            }
            System.out.println("sum2= "+ sum2);
        }
    }    

    Arrays 类

    java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。

    具有以下功能:

    • 给数组赋值:通过 fill 方法。
    • 对数组排序:通过 sort 方法,按升序。
    • 比较数组:通过 equals 方法比较数组中元素值是否相等。
    • 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。

    具体说明请查看下表:

    序号

    方法和说明

    1

    public static int binarySearch(Object[] a, Object key)

    用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。

    2

    public static boolean equals(long[] a, long[] a2)

    如果两个指定的 long 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。

    3

    public static void fill(int[] a, int val)

    将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。

    4

    public static void sort(Object[] a)

    对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。

  • 相关阅读:
    python threading模块中对于信号的抓取
    docker挂载NVIDIA显卡运行pytorch
    更换HomeBrew源
    IX-Protected Dataplane Operating System解读
    NFV、DPDK以及部分用户态协议研究
    (一)最小的Django
    (二)无状态的web应用(单py的Django占位图片服务器)
    Windows7 64位环境下Python-igraph环境配置
    关于docker使用的几个小问题(二)
    关于docker使用的几个小问题(一)
  • 原文地址:https://www.cnblogs.com/dyx2018/p/9189658.html
Copyright © 2020-2023  润新知