Java 入门总结(五) —— Arrays 类
1、Java 中的 Arrays 类中包含一些对数组操作的静态方法。
2、Arrays 的 toString 方法可以方便的输出一个数组的字符串形式。
3、数组排序之基本类型,对指定类型的数组按升序进行排序。sort 方法还可以指定排序范围 [fromIndex, toIndex)。
4、数组排序之对象类型,sort 还可以直接接受对象类型,但对象需要实现 Comparable 接口。
5、数组排序之自定义比较器,sort 还可以接受一个比较器作为参数。Comparator 就是比较器,它是一个接口,最主要的是 compare 这个方法,它比较两个对象,返回一个表示比较结果的值,-1 表示 o1 小于 o2,0 表示相等,1表示 o1 大于 o2。排序是通过比较来实现的,sort 方法在排序的过程中,需要对对象进行比较的时候,就调用比较器的 compare 方法。
6、需要注意的是 binarySearch 针对的必须是已排序数组,如果指定了 Comparator,需要和排序时指定的 Comparator 保持一致,另外,如果数组中有多个匹配的元素,则返回哪一个是不确定的。
7、在创建多维数组时,除了第一维的长度需要指定外,其他维的长度不需要指定,甚至,第一维中,每个元素的第二维的长度可以不一样。
8、多维数组到底是什么呢?其实,可以认为,多维数组只是一个假象,只有一维数组,只是数组中的每个元素还可以是一个数组,这样就形成二维数组,如果其中每个元素还都是一个数组,那就是三维数组。
9、Arrays 类的 sort 实现原理:
- 基本数据类型数据:双枢轴快速排序(Dual-Pivot Quicksort);是一种对快速排序(不稳定)进行优化后的算法;
- 引用数据类型数据:TimSort;是一种对归并排序(稳定)进行优化后的算法;
它们之所以没有采用相同的排序算法,跟排序算法的稳定性有关。快速排序更快,但不稳定,而归并排序是稳定的。对于基本类型,值相同就是完全相同,所以稳定不稳定没有关系。但对于对象类型,相同只是比较结果一样,它们还是不同的对象,其他实例变量也不见得一样,稳定不稳定可能就很有关系了,所以采用归并排序。
10、Comparator 接口和 Comparable 接口?
Comparable 接口和 Comparator 接口的比较