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等)。

原文地址:https://www.cnblogs.com/dyx2018/p/9189658.html