快速入门 - Java 一维数组和二维数组详解


数组简介

通常数组是具有连续内存位置的元素的集合。它是一个数据结构,我们存储类似的元素。Java语言中提供的数组是用来存储固定大小的同类型元素,因此只能在Java数组中存储固定的元素集合。

Java中的数组是基于索引的,数组的第一个元素存储的索引为:0。

数组优缺点

Array优点

代码优化:它使代码优化,可以轻松地检索或排序数据。

随机访问:可以获取任何位于任何索引位置的数据。

Array缺点

大小限制:只能在数组中存储固定大小的元素。 它在运行时不会增长其大小。 为了解决这个问题,在Java中使用了集合框架。

Java中的数组类型有两种类型的数组分别是一维数组,多维数组。

一维数组

内存简化结构

  1. 栈(stack) :存放基本类型的变量数据、局部变量和对象的引用,但对象本身不存放在栈中。
  2. 堆(heap) :存放由new创建的对象和数组以及对象的实例变量。
  3. 静态存储区(static storage) :又叫方法区:包含的都是在整个程序中永远唯一的元素,如class,static变量。
  4. 常量存储区(constant storage) :常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。
  5. 静态区/静态域(static storage) :随着类的加载而加载并初始化,存在于方法区内存中的字节码文件的静态区域中。

Java中声明一个数组的语法(dataType数据声明类型):

    dataType[] arr; (or)  // 通用方式,首选
    dataType []arr; (or)  // 效果相同
    dataType arr[];       // 效果相同

在Java中实例化一维数组,语法:

    dataType[] arrayRefVar = new datatype[size];

实例:

    
    public class Testarray {
        public static void main(String args[]) {
            int a[] = new int[5];
            a[0] = 10;
            a[1] = 20;
            a[2] = 70;
            a[3] = 40;
            a[4] = 50;
            for (int i = 0; i < a.length; i++) {
                System.out.println("遍历数组值 " + a[i]);
            }
        }
    }

运行结果如下:

   遍历数组值 10
   遍历数组值 20
   遍历数组值 70
   遍历数组值 40
   遍历数组值 50

数组变量的声明,还可以使用如下的方式创建数组,语法:

    dataType[] arrayRefVar = {value0, value1, ..., valuek};

实例:

    public class Testarray {
        public static void main(String args[]) {
            int a[] = {10,20,70,40,50};
            for (int i = 0; i < a.length; i++) {
                System.out.println("遍历数组值 " + a[i]);
            }
        }
    }

运行结果如下:

    遍历数组值 10
    遍历数组值 20
    遍历数组值 70
    遍历数组值 40
    遍历数组值 50

多维数组

数据存储在基于行和列的索引(也称为矩阵形式)中,在Java中声明多维数组的语法:

    dataType[][] arrayRefVar; (or)  
    dataType [][]arrayRefVar; (or)  
    dataType arrayRefVar[][]; (or)  
    dataType []arrayRefVar[];

在Java中实例化多维数组,语法:

    dataType[][] arrayRefVar = new dataType[arraylenght1][arraylenght2];

dataType可以是基本数据类型和复合数据类型,arraylenght1和arraylenght2必须为正整数,arraylenght1为行数,arraylenght2为列数。

实例:

    public class Testarray {
        public static void main(String args[]) {
            String s[][] = new String[2][];
            s[0] = new String[3];
            s[1] = new String[3];
            s[0][0] = new String("素");
            s[0][1] = new String("文");
            s[0][2] = new String("宅");
            s[1][0] = new String("博");
            s[1][1] = new String("客");
            s[1][2] = new String("!");
            for (int i = 0; i < 2; i++) {
                for (int j = 0; j < 3; j++) {
                    System.out.print(s[i][j]);
                }
            }
        }
    }

运行结果如下:

    素文宅博客!

java.util.Arrays类

此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。具有以下功能:

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

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

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

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

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

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

    public static void sort(Object[] a)

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

引用资料