学习总结-Thinking In Java Chapter 16 arrays

来源:互联网 发布:恐怖美术馆ib知乎 编辑:程序博客网 时间:2024/06/05 19:06

学习总结

本篇是对学习【Java编程思想 第16章 数组】的学习总结。

  • 数组
    数组是一种效率最高的存储和随机访问对象引用序列的方式

  • 数组标识符
    无论使用哪种类型的数组,数组标识符其实只是一个引用,指向在堆中创建的一个真实对象,这个(数组)对象用以保存指向其他对象的引用。“[]”语法是访问数组对象唯一的方式。

int[] a = {1,2,3,4,5};a [3] = 100;
  • 初始化
    关于聚集初始化和动态聚集初始化
    // 聚集初始化,必须在数组定义式使用    BerylliumSphere[] a = {                new BerylliumSphere(),                new BerylliumSphere(),                new BerylliumSphere()};    // 动态聚集初始化,定义和初始化可以分开    BerylliumSphere[] b;    b = new BerylliumSphere[]{                new BerylliumSphere(),                new BerylliumSphere(),                new BerylliumSphere()};
  • 返回数组
    在Java中,方法时直接返回“一个数组”,而非数组的引用。当你使用完后,垃圾回收器会清理它。

  • 粗糙数组
    数组中构成矩阵的每个向量具有不同的长度,成为粗糙数组。

        Random rand = new Random(47);        int[][][] arr = new int[rand.nextInt(7)][][];        for ( int i = 0; i < arr.length ; i++ ) {            arr[i] = new int[rand.nextInt(5)][];            for ( int j = 0; j < arr[i].length ; j++ ) {                arr[i][j] = new int[rand.nextInt(7)];            }        }        System.out.println(Arrays.deepToString(arr));
  • 复制数组
        // 拷贝数组,        // 参数意义:源数组        //          表示从源数组中的什么位置开始复制的偏移量        //          目的数组        //          表示从目的数组中的什么位置开始复制的偏移量        //          复制的元素的个数        System.arraycopy(i, 0, j, 0, i.length);

基本数据类型数组和对象数组都可以复制。然而,如果复制对象数组,那么只是复制对象的引用——而不是对象本身,这被称为浅复制(Shallow Copy)。

  • 填充数组
Arrays.fill()
  • 数组排序
Arrays.sort()

排序对象需要实现Comparable接口,当然我们可以自定义排序方式,让其实现Comparator接口。

// 系统的ComparatorArrays.sort(s, String.CASE_INSENSITIVE_ORDER);Arrays.sort(a, Collections.reverseOrder());// 自定义的ComparatorArrays.sort(b, new ComparatorTest());

Java标准库中的排序算法针对正排序的特殊类型就行了优化——针对基本类型设计的“快速排序”,以及针对对象设计的“稳定归并排序”。

  • 在已排序数组中查找
Arrays.binarySearch()

如果数组是自定义排序的,那么二分查找也需要自定义查找,也就是说需要传入相同的Comparator

        Comparator<DataHolder> cmp = Comparator.comparing(DataHolder::getData);//lambda表达式        DataHolder[] datas = new DataHolder[15];        Arrays.sort(datas, cmp);        int location = Arrays.binarySearch(datas, datas[5], cmp);
  • 判断数组是否相等
Arrays.equals() and Arrays.deepEquals()
  • 输出数组
Arrays.toString() and Arrays.deepToString()
原创粉丝点击