学习总结-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()
相关文章推荐
- 学习总结-Thinking In Java Chapter 15 generics
- 学习总结-Thinking In Java Chapter concurrency(1)
- 学习总结-Thinking In Java Chapter 8 polymorphism
- 学习总结-Thinking In Java Chapter 13 strings
- Thinking in java学习笔记之持有对象总结
- Thinking in Java学习笔记(三)(zt)
- Java学习总结16——Java Web应用性能优化总结
- Thinking in java Chapter 1 笔记
- Think in Java 静态工厂方法学习总结
- 学习 thinking in java
- 【Notes】《Thinking in Java》【Chapter 11】Part II
- 《Thinking in Java》狗血的学习笔记-2表达式与控制流程
- thinking in java 14章 类型信息 学习笔记
- Thinking in Java from Chapter 10
- 学习《Thinking in java》笔记二
- 《Thinking in Java》狗血的学习笔记-3初始化
- 学习总结: C++ 模板 (thinking in C++)
- Thinking in Java [Java编程机制] 学习笔记 -- 变量和对象
- 《Thinking in Java》 学习笔记---多态?晚绑定。
- Thinking in Java之Set接口、HashSet源码学习