您的位置:首页 > 编程语言 > Java开发

学习总结-Thinking In Java Chapter 16 arrays

2017-06-26 20:11 281 查看

学习总结

本篇是对学习【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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 对象 存储 编程