zoukankan      html  css  js  c++  java
  • Java 数组基础,java.util.Arrays

    定义数组

    方式1(推荐,更能表明数组类型)

    方式2(同C语言)

    方式3定义时直接初始化

    数组运用基础

    数组长度

    equals()

    数组元素不为基本数据类型时

    二维数组

    二维数组基础

    变长的二维数组

    java.utils.Arrays

    参考文献:

     

    数组(Array):相同类型数据的集合。

    定义数组

    方式1(推荐,更能表明数组类型)

    type[] 变量名 = new type[数组中元素的个数];

    比如:

    int[] a = new int[10];

    数组名,也即引用a,指向数组元素的首地址。

    方式2(同C语言)

    type变量名[] = new type[数组中元素的个数];

    比如:

    int a[] = new int[10];

    方式3定义时直接初始化

    type[] 变量名new type[]{逗号分隔的初始化值};

    其中红色部分可省略,所以又有两种:

    int[] a = {1,2,3,4};

    int[] a = new int[]{1,2,3,4};

    其中int[] a = new int[]{1,2,3,4};的第二个方括号中不能加上数组长度,因为元素个数是由后面花括号的内容决定的。

    数组运用基础

    数组长度

    Java中的每个数组都有一个名为length的属性,表示数组的长度。

    length属性是public final int的,即length是只读的。数组长度一旦确定,就不能改变大小。

    equals()

    数组内容的比较可以使用equals()方法吗?

    如下程序:

    public static void main(String[] args) {

            int[] a = { 1, 2, 3 };

            int[] b = { 1, 2, 3 };

     

            System.out.println(a.equals(b)); // false

            System.out.println(Arrays.equals(a, b)); // true

        }

    输出为:

    false

    true

    所以证明不能直接用equals()方法比较数组内容,因为没有override Object中的实现,所以使用的是其内存地址进行比较,也就是采用==实现equals()方法,比较是否为同一个对象。

    怎么比较呢?一种解决方案是自己写代码,另一种方法是利用java.util.Arraysequals方法。

    数组元素不为基本数据类型时

    数组元素不为基本原生数据类型时,存放的是引用类型,而不是对象本身。当生成对象之后,引用才指向对象,否则引用为null

    如下列程序:

    package array;

     

    public class ArrayTest2 {

        public static void main(String[] args) {

            Person[] p = new Person[3];

     

            // 未生成对象时,引用类型均为空

            System.out.println(p[0]);

     

            // 生成对象之后,引用指向对象

            p[0] = new Person(10);

            p[1] = new Person(20);

            p[2] = new Person(30);

     

            for (int i = 0; i < p.length; i++) {

                System.out.println(p[i].age);

            }

        }

    }

     

    class Person {

        int age;

     

        public Person(int age) {

            this.age = age;

        }

    }

    输出为:

    null

    10

    20

    30

    也可以在初始化列表里面直接写:

    Person[] p = new Person[]{new Person(10), new Person(20), new Person(30)};

    二维数组

    二维数组是数组的数组。

    二维数组基础

    基本的定义方式有两种形式,如:

    type[][] i = new type[2][3];(推荐)

    type i[][] = new type[2][3];

    如下程序:

    package array;

     

    public class ArrayTest3 {

        public static void main(String[] args) {

     

            int[][] i = new int[2][3];

     

            System.out.println("Is i an Object? " + (i instanceof Object));

     

            System.out.println("Is i[0] an int[]? " + (i[0] instanceof int[]));

     

        }

    }

    输出为:

    Is i an Object? true

    Is i[0] an int[]? true

    变长的二维数组

    二维数组的每个元素都是一个一维数组,这些数组不一定都是等长的。

    声明二维数组的时候可以只指定第一维大小,空缺出第二维大小,之后再指定不同长度的数组。但是注意,第一维大小不能空缺(不能只指定列数不指定行数)。

    如下程序:

    package array;

     

    public class ArrayTest4 {

        public static void main(String[] args) {

            // 二维变长数组

            int[][] a = new int[3][];

            a[0] = new int[2];

            a[1] = new int[3];

            a[2] = new int[1];

     

            // Error: 不能空缺第一维大小

            // int[][] b = new int[][3];

        }

    }

    二维数组也可以在定义的时候初始化,使用花括号的嵌套完成,这时候不指定两个维数的大小,并且根据初始化值的个数不同,可以生成不同长度的数组元素。

    如下程序:

    package array;

     

    import java.util.Arrays;

     

    public class ArrayTest5 {

        public static void main(String[] args) {

     

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

     

            for (int[] arr : c) {

                System.out.println(Arrays.toString(arr));

            }

        }

    }

    输出为:

    [1, 2, 3]

    [4]

    [5, 6, 7, 8]

    java.utils.Arrays

    public class Arrays
    			

    extends Object
    			

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

    除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullPointerException。

    此类中所含方法的文档都包括对实现 的简短描述。应该将这些描述视为实现注意事项,而不应将它们视为规范 的一部分。实现者应该可以随意替代其他算法,只要遵循规范本身即可。(例如,sort(Object[]) 使用的算法不必是一个合并排序算法,但它必须是稳定的。)

    此类是 Java Collections Framework 的成员。

    具体说明请查看下表:

    方法

    说明

    asList

    将数组转成List,基本类型的数组。此方法同 Collection.toArray() 一起,充当了基于数组的 API 与基于 collection API 之间的桥梁。

    binarySearch

    使用二分搜索法来获得索引位置

    copyOf

    复制指定的数组,截取或用 null 填充(如有必要),以使副本具有指定的长度。

    copyOfRange

    将指定数组的指定范围复制到一个新数组。

    equalsdeepEquals

    区别是deepEquals适用于多维数组

    hashCodedeepHashCode

    deepHashCode基于指定数组的"深层内容"返回哈希码。如果deepEquals的结果是true,则deepHashCode相等

    fill

    将指定的 boolean 值分配给指定 boolean 型数组的每个元素。

    sort

    对数组进行排序

    toString

    返回指定数组内容的字符串表示形式。

     

     

     

     

     

    参考文献:

    Java 数组基础

    菜鸟教程——Java数组

    JDK API 1.6.0 中文版

  • 相关阅读:
    cmd启动数据库时,出现 (无法启动此程序,因为计算机中丢失VCRUNTIME140_1.dll 尝试重新安装此程序以解决此问题 )解决方法。
    浅谈Promise语法API+封装
    浅谈JS回调地狱
    MySQL数据库安装步骤
    将MongoDB安装为Windows服务---安装MongoDB服务
    后缀.msc文件是什么?
    Mongoose类库使用教程---实现增删改查
    MongoDB可视化工具--Robo 3T 安装使用教程
    久违的锻炼
    出差(2~十四)
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/5701510.html
Copyright © 2011-2022 走看看