第1次实验
目标:
- 学会使用Comparable接口与Comparator接口。
- 掌握Comparable、Comparator与Arrays.sort之间的关系
1.让Person可比较
使用"基础代码-persons"目录中的源代码进行实验。
- 让Person类(name, age)实现Comparable接口
- 按age比较,然后使用Arrays.sort升、降序排序
- 按name比较,然后排序。需考虑name为
null
的情况
注意
- name为null时,需考虑几种情况(当前对象name为null,传入对象name为null).
- 可直接复用String的比较方法。
- 在
public int compareTo(Person o) {
中编写if (this == null) return -1
是否合理?this可能为null吗? - 思考:如果perosons数组中某个元素为null,排序的时候会碰到什么问题?
2.为Person创建比较器
- NameComparator(重点讲解)
- AgeComparator(自行完成)
思考
- 如何快速实现与自定义Comparator相逆的方式进行排序?
- Comparator的默认方法reversed
- 如何处理perosons数组中某个元素为null的情况?
- 使用Comparator.nullsFirst或Comparator.nullsLast
- 如何匿名类来实现Comparator?如何使用Lambda表达式进一步改进?
3. PTA题集5-1(Comparable)
难点:如果传入对象为null
,或者传入对象的某个属性为null
,怎么处理?
进阶:Comparable只能实现一种比较方式。如果需要有多种不同的比较方式,则应使用Comparator接口。
4. PTA题集5-2(Comparator)
进阶:使用匿名内部类实现NameComparator与AgeComparator的的功能。
进阶:使用Lambda表达式语法实现NameComparator与AgeComparator的的功能。
难点同上。
注:PTA平台的jdk环境Open JDK6(新版已支持Open JDK8),不支持Java8的一些语法,如Lambda表达式。
第2次实验
目标:
- 掌握静态嵌套类的定义与使用
- 掌握如何自定义接口
1. PTA题集5-3(静态嵌套类)
静态嵌套类不同于内部类,其可以独立于外部类。但是一般来说静态嵌套类和外部类有较紧密的关系,定义为嵌套类,更利于理解。
2. PTA题集5-4(自定义接口ArrayIntegerStack)
如何使用数组或者列表实现一个栈。通过接口将栈的操作抽象出来,然后可以有不同的实现。
3. 结对编程指导
- 在码云上加入新成员
- Eclipse中可能碰到的问题(如,冲突)
其他参考资料: