课前问题列表
- 回顾以前数据结构的知识,所有排序算法的基本操作是什么?这个基本操作和Comparable接口又有什么关系?这个基本操作得到的结果有哪几种?
- 排序算法的基本操作是比较
- Comparable接口是一个拥有比较行为的接口,该接口代表将当前对象与传入对象other进行比较,比较的结果用int值返回。
- ==0,与other相等;>0,比other大;<0,比other小
- 详细描述:为什么某个类实现了Comparable接口,就可以对该类的集合(如数组、ArrayList)使用Arrays.sort进行排序?Comparator接口相较于Comparable接口有什么优势?
// Insertion sort on smallest arrays
if (length < INSERTIONSORT_THRESHOLD) {
for (int i=low; i<high; i++)
for (int j=i; j>low &&
((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
swap(dest, j, j-1);
return;
}
- 查看以上Arrays.sort(Obiect[ ] a)的源代码,所有实现了Comparable接口的元素都可以复用Arrays.sort(Obiect[ ] a)的排序代码,使用Arrays.sort对Comparable接口的元素组成的数组进行排序
- 一旦一个类实现了Comparable接口,那么对该类的比较就被固定下来了,必须要定义多个接口才能实现对多种属性的比较。而即使两个对象没有Comparable接口,也可以使用Comparator接口进行比较,只要有比较器,Arrays.sort便能对相应对象进行排序
public static <T> void sort(T[] a, Comparator<? super T> c) {
//<? super T>表示都是类型T的父类,包括T自己(特别注意)
if (c == null) {
sort(a);
} else {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a, c);
else
TimSort.sort(a, 0, a.length, c, null, 0, 0);
}
}
- 你觉得为什么有了抽象类还需要接口?接口相较于继承有什么不同,体现了什么关系?
1.
①.类可以实现多个接口但只能继承自一个抽象类,从抽象类派生出的子类同样可以实现接口,从而,我们能得出一个结论:接口是为Java实现多继承而存在的
②.抽象类中可以存在非抽象的方法,可接口不能存在非抽象的方法,并且接口里面的方法只是一个声明,必须用 public abstract来修饰,没有具体的实现
③.抽象方法中的成员变量可以被不同的修饰符修饰,而接口中的成员变量默认都是静态常量
④.抽象类是对对象进行的抽象,而接口是一种行为规范
2.在继承体系中,一个类只能继承一个父类。而对于接口而言,一个类是可以实现多个接口
的,这叫做接 口的多实现。并且,一个类能继承一个父类,同时实现多个接口。继承,是一种血缘关系的表现;接口,就是类的额外工具。体现了Java面向对象的多态性