潮风粤韵 发表于 2021-5-28 15:36:55

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));

似水年华的凄美 发表于 2021-5-30 05:06:54

当您将其与Comparator进行比较时,可以使用Comparator实现对其进行排序

似水年华的凄美 发表于 2021-5-30 15:28:42

这里的重点是,当你排序的时候,你写你自己的比较,你用比较器代替

//自己手写排序处理(以冒泡为例)
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;
      }
    }
}

夏日里的告别 发表于 2021-6-1 00:02:28

二叉树也一样,比如用插入节点来生成二叉树,插入的节点是该插在左子树还是插在右子树,也是把手写比较两个节点改成用比较器来比较两个节点
页: [1]
查看完整版本: Arrays类实现排序有人可以讲讲其原理吗?