在CompareTo()方法中增加输出语句
public int compareTo(Stu stu) {
System.out.println(this.name+"------"+stu.name);
return this.name.compareTo(stu.name);
}
public static void main(String[] args) {
List<Stu> al = new ArrayList<Stu>();
al.add(new Stu("zhangsan"));
al.add(new Stu("lisi"));
al.add(new Stu("wangwu"));
al.add(new Stu("zhaoliu"));
sop(al.toString());
System.out.println("--------排序------");
Collections.sort(al);// 采用Stu类compareTo排序
System.out.println("--------排序------");
sop(al.toString());
System.out.println("--------根据自然排序找最大值------");
sop(Collections.max(al));
System.out.println("--------根据自然排序找最大值------");
}
自然情况下结果:
[zhangsan, lisi, wangwu, zhaoliu]
--------排序------
lisi------zhangsan
wangwu------lisi
wangwu------zhangsan
wangwu------lisi
zhaoliu------wangwu
zhaoliu------zhangsan
--------排序------
[lisi, wangwu, zhangsan, zhaoliu]
--------根据自然排序找最大值------
wangwu------lisi
zhangsan------wangwu
zhaoliu------zhangsan
zhaoliu
--------根据自然排序找最大值------
根据结果我总结出排序的时候是进行的是二分查找然后进行的比较
结果总结:当查找最大值的时候,都是与最大值比较
compareTo的返回结果永远是1的时候:
[zhangsan, lisi, wangwu, zhaoliu]
--------排序------
lisi------zhangsan
wangwu------lisi
zhaoliu------wangwu
--------排序------
[zhangsan, lisi, wangwu, zhaoliu]
--------根据自然排序找最大值------
lisi------zhangsan
wangwu------lisi
zhaoliu------wangwu
zhaoliu
--------根据自然排序找最大值------
结果总结:当查找最大值的时候,都是与最大值比较
compareTo的返回结果永远是-1的时候:
[zhangsan, lisi, wangwu, zhaoliu]
--------排序------
lisi------zhangsan
wangwu------lisi
zhaoliu------wangwu
--------排序------
[zhaoliu, wangwu, lisi, zhangsan]
--------根据自然排序找最大值------
wangwu------zhaoliu
lisi------zhaoliu
zhangsan------zhaoliu
zhaoliu
--------根据自然排序找最大值------
结果总结:当查找最大值的时候,却都是与最小值比较
根据所有结果总结却找不到合理的解释,我感觉是不是根据的是比较的结果,然后才找最大值,而不是排序后的集合最后的元素才是最大的
希望对你有帮助!
|