学习总结
本篇是对学习【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()