Arrays类实现排序有人可以讲讲其原理吗?
System.out.println("通过Comparator接口,多态机制,匿名内部类实现定制排序:");Integer[] arr2={8,9,4,10,5,6,1};//包装类数组
Arrays.sort(arr2, new Comparator<Integer>() {
@Override//重写接口的compare方法
public int compare(Integer o1, Integer o2) {
Integer In1 = (Integer)o1;
Integer In2 = (Integer)o2;
return In1-In2;
}
});
System.out.println(Arrays.toString(arr2));
当您将其与Comparator进行比较时,可以使用Comparator实现对其进行排序 这里的重点是,当你排序的时候,你写你自己的比较,你用比较器代替
如
//自己手写排序处理(以冒泡为例)
for(int i=0; i<arr2.length; i++) {
for(int j=0; j<arr2.length-i-1; j++) {
if(arr2 > arr2) { //这里是手写比较,比较方式是固定的
int tmp=arr2;
arr2 = arr2;
arr2=tmp;
}
}
}
//改成用比较器比较
for(int i=0; i<arr2.length; i++) {
for(int j=0; j<arr2.length-i-1; j++) {
if(comp.compare(arr2, arr2)>0) { //这里改成用比较器比较,这样就可以改变比较器的逻辑也就是改变compare方法来达到不同的排序结果
int tmp=arr2;
arr2 = arr2;
arr2=tmp;
}
}
} 二叉树也一样,比如用插入节点来生成二叉树,插入的节点是该插在左子树还是插在右子树,也是把手写比较两个节点改成用比较器来比较两个节点
页:
[1]