学习总结-Thinking In Java Chapter 16 arrays

学习总结

本篇是对学习【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接口。

// 系统的Comparator
Arrays.sort(s, String.CASE_INSENSITIVE_ORDER);
Arrays.sort(a, Collections.reverseOrder());
// 自定义的Comparator
Arrays.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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值