zoukankan      html  css  js  c++  java
  • 第3篇 Java中的数组及Array工具类

    数组

    1、数组的几个重要特征

    • 连续存储空间(方便查找)

    • 数组长度固定(灵活性差)

    • 数组中只能存放相同的数据类型

    • 数组下标从0开始计算

    2、数组的声明定义

    //定义int型数组ary0并声明长度为4
    int ary0[] = new int[4];
    //定义int型数组ary1同时赋初始值
    int ary1[] = new int[]{1,2,3,4};

    在上面对两个数组的定义中:赋值运算左边为对数组的定义,包括有数组类型、数组名;赋值运算右边为对数组开辟相应数据类型、对应长度的内存空间。

    3、数组的遍历

    通过ary0.length可以获取数组的长度

    int ary0[] = new int[10];
    //以数组长度为边界,根据下标对应赋值
    for (int i = 0; i < ary0.length; i++) {
        ary0[i] = i;
    }
    //加强for循环,i依次指向数组每个元素,打印输出
    for (int i : ary0) {
        System.out.println("ary0中第"+i+"个元素:"+ary0[i]);
    }

    输出结果为:

    ary0中第0个元素:0
    ary0中第1个元素:1
    ary0中第2个元素:2
    ary0中第3个元素:3
    ary0中第4个元素:4
    ary0中第5个元素:5
    ary0中第6个元素:6
    ary0中第7个元素:7
    ary0中第8个元素:8
    ary0中第9个元素:9

     Arrays工具类

     Arrays类为java.util包里的一个工具类,提供对数组的一些操作方法,常用的有排序(sort)、填充(fill)、拷贝(copyOf)、查找(binarySearch)、判断相等(equals)

    1、排序(sort)

    Arrays.sort() 支持的类型有char、double、int、byte、float等,同时还支持泛型,但需要自己实现Comparator接口

    int ary1[] = new int[]{5,23,15,33,24,6,79,19};
    //使用Arrys.sort()对ary1进行从小到大排序
    Arrays.sort(ary1);
    for (int i : ary1) {
        System.out.print(i+" ");
    }

    打印结果为:

    5 6 15 19 23 24 33 79 

    2、填充(fill)

    将数组所有元素赋值为统一的填充值,如果对应元素已经有值了,则将覆盖原来的值

    //Arrays.fill(int[] a, int val) 的实现:
    public static void fill(int[] a, int val) {
            for (int i = 0, len = a.length; i < len; i++)
                a[i] = val;
    }

    对数组ary2进行填充,将所有元素填充为9:

    int ary2[] = new int[10];
    Arrays.fill(ary2, 9);
    for (int i : ary2) {
        System.out.print(i+" ");
    }

    最后填充所得到的结果为:

    9 9 9 9 9 9 9 9 9 9 

    3、拷贝(copyOf)

    参数:

      int[] original:被拷贝的数组

      int newLength:被拷贝的长度,即original中被拷贝元素的长度

    Arrays.copyOf() 函数会返回一个全新的数组,数组中的元素依次被赋值为orignal数组中前n个元素的值,n即被拷贝的长度,当n大于original数组的长度时,可用来对数组长度进行扩展,扩展部分元素值为0

    int ary0[] = new int[]{1,2,3,4,5,6};
    int ary1[];
    //将ary0前三个元素拷贝给ary1
    ary1 = Arrays.copyOf(ary0, 3);
    //打印ary1的长度与元素值
    System.out.println(ary1.length);
    for (int i : ary1) {
        System.out.print(i+" ");
    }

    打印结果为:

    3
    1 2 3 

    表明ary0中前3个元素【1,2,3】被复制给了一块新的内存空间,同时ary1指向该空间:

    4、二分查找(binarySearch)

    • 使用二分查找时,必须先将数组排序
    • 一般用在查找元素是否存在
    • 如果数组没有排序,结果无法确定
    • 如果包含多个指定值,无法保证找到的是哪一个,如果找不到,则返回负数
    int ary0[] = new int[]{1,2,5,4,3,6};
    //对ary0中3这个元素进行查找
    int index = Arrays.binarySearch(ary0, 3);
    System.out.println("未排序的数组为:");
    showAry(ary0);
    System.out.println("未排序进行查找结果:"+index);
    //对ary0进行排序,再次查找
    Arrays.sort(ary0);
    System.out.println("排序的数组为:");
    showAry(ary0);
    index = Arrays.binarySearch(ary0, 3);
    System.out.println("排序后进行查找结果:"+index);
    //ary0指向新的、存在多个相同元素数组
    ary0 = new int[]{1,2,3,4,5,2,6,3,8};
    //再次进行查找
    Arrays.sort(ary0);
    System.out.println("多值相同且排序过的数组:");
    showAry(ary0);
    index = Arrays.binarySearch(ary0, 3);
    System.out.println("多值相同进行查找结果:"+index);

    打印结果为:

    未排序的数组为:
    1 2 5 4 3 6
    未排序进行查找结果:-3
    排序的数组为:
    1 2 3 4 5 6
    排序后进行查找结果:2
    多值相同且排序过的数组:
    1 2 2 3 3 4 5 6 8
    多值相同进行查找结果:4

    5、判断相等(equals)

    使用Arrays.equals() 判断相等时,进行的是数组各元素的值的比对,而非对ary0和ary1所指向地址的比对,具体实现如下:

    public static boolean equals(int[] a, int[] a2) {
            if (a==a2)
                return true;
            if (a==null || a2==null)
                return false;
    
            int length = a.length;
            if (a2.length != length)
                return false;
    
            for (int i=0; i<length; i++)
                if (a[i] != a2[i])
                    return false;
    
            return true;
    }

    区别如下:

    int ary0[] = new int[]{1,2,3,4,5};
    int ary1[] = new int[]{1,2,3,4,5};
    //根据地址判断相等
    System.out.println(ary0==ary1);        
    //根据值判断相等
    System.out.println(Arrays.equals(ary0, ary1));

    所得打印结果为:

    false
    true

    在这里要注意不要将其与object类下的equals()方法搞混了,因为object类的equals方法本质上还是使用的 ”==“ 比较运算符,所以所得结果还将是false

    最后是一些练习

    将数组 ary0={1,2,3,4,5}、ary1={6,7,8,9,10} 整合成一个新的数组并打印

    int ary0[] = new int[]{1,2,3,4,5};
    int ary1[] = new int[]{6,7,8,9,10};
    
    //先将ary0拷贝进ary2,数组长度为两数组长度之和
    int []ary2 = Arrays.copyOf(ary0,ary0.length+ary1.length);
    //打印ary2
    showAry(ary2);
    //再将ary1中元素通过赋值的方法依次拷贝
    for (int i = 0; i < ary1.length; i++) {
        ary2[i+ary0.length] = ary1[i];
    }
    //得到最后结果,打印ary2
    showAry(ary2);

    得到打印结果如下:

    1 2 3 4 5 0 0 0 0 0 
    1 2 3 4 5 6 7 8 9 10 
  • 相关阅读:
    Apache Hadoop 英文官方参考文档及中文文档
    谷歌大数据那三篇论文-中文版
    Java学习笔记(一):基础概念和语法
    Java基础概念、知识点整理
    TensorFlow基础知识
    Kafka集群环境配置
    Sqoop数据迁移工具的使用
    HBase的安装和使用
    Flume日志采集框架的使用
    zookeeper的安装和使用
  • 原文地址:https://www.cnblogs.com/JuanF/p/9263901.html
Copyright © 2011-2022 走看看