励志称为JAVA之父的第30天public class Main { public static void main(String[] args) { //第一种:创建集合并且在构造器中传递一个自定义类的比较器对象,因为在自定义比较器中重写过compare(o1,o2)方法 TreeSet<WuGui> ts = new TreeSet<>(new WuGuiComparator()); //第二种:或者使用匿名内部类的方式去便捷的使用compare方法 //以上两种方式不管是写自定义类还是匿名类的方式输出结果都是一样的,都属于实现Comparator的方式 TreeSet<WuGui> WuGuis = new TreeSet<>(new Comparator<WuGui>() { @Override public int compare(WuGui o1, WuGui o2) { return o1.age - o2.age; } }); WuGui wuGui1 = new WuGui(12); WuGui wuGui2 = new WuGui(184); WuGui wuGui3 = new WuGui(43); WuGui wuGui4 = new WuGui(2); WuGui wuGui5 = new WuGui(86); ts.add(wuGui1); ts.add(wuGui2); ts.add(wuGui3); ts.add(wuGui4); ts.add(wuGui5); //增强for循环取出ts集合中的值 for (WuGui wugui : ts){ System.out.println(wugui); } } } class WuGui { int age; public WuGui(int age) { //有参构造器 this.age = age; } public String toString(){ //重写toString方法 return "WuGui["+age+"]"; } } class WuGuiComparator implements Comparator<WuGui>{ //自定义类去实现比较器中的compare方法 public int compare(WuGui o1,WuGui o2){ return o1.age - o2.age; } }
tip: 1.Comparable接口中compareTo方法返回值很重要:返回0表示相同,value覆盖;返回>0则从右子树找反之<0则从左子树上找
2.自平衡二叉树数据结构:遵循左小右大原则,遍历二叉树的时候有三种方法分别为前序遍历(根左右).中序遍历(左根右). 后序遍历(左右根),根在前面是前序,根在中间是中序,根在后面是后序,而TreeSet和 TreeMap集合采用的是中序 遍历方式"左根右"
3.TreeSet集合中可排序的第二种方式:使用比较器的方式
4.对于实现自动排序的方式有两种:第一种为实现Comparable接口中的compareTo方法(以一通百,便捷) 第二种为实现Comparator中的compare方法(耦合低,符合OCP原则)
5.如果比较规则经常发生改变则使用第二种comparator 反之比较规则不会经常改动或者说比较规则只有一个的时候则使用实现Comparable接口
Java中集合自动排序的实现初步
最新推荐文章于 2024-08-13 09:54:51 发布