Comparator排序
作者:邹爱红,撰写时间:2019年04月18日
- 定义一个类.,封装一些方法
class ComparatorDemo{
private int age;
private String name;
public ComparatorDemo() {
}
public ComparatorDemo (String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String
getName() {
return name;
}
public void setName(String name) {
this.name =name;
}
}
然后去主方法里面用集合ArrayList实例化列表,然后添加数据
List 变量=new ArrayList< ComparatorDemo >();
因为直接打印可能会返回对象,因为定义的数据多,所以用add添加数据,
bianliang.add(new ComparatorDemo (“二”, 25));
bianliang.add(new ComparatorDemo (“三”, 25));
bianliang.add(new ComparatorDemo (“四”, 12));
bianliang.add(new ComparatorDemo (“九”, 33));
bianliang.add(new ComparatorDemo (“七”, 33));
bianliang.add(new ComparatorDemo (“五”, 33));
- 调用sort排序comparator排序比comparable(collections.sort())的方法多了个参数实例化接口,new
comparator< ComparableDemo >对那个方法要进行排序的对象,然后去实现接口里面的方法compareto, 里面排序的规则是从小到大:o1-o2 从大到小:o2-o1,O1对应Comparatable里面的This, o2对应comparatable里面的O
Collections.sort(bianliang, new Comparator<
ComparatorDemo > () {
@Override
public int compare(PersonComparator o1,PersonComparator o2) {
if (o1.getAge() != o2.getAge()) {
return o1.getAge() ‐ o2.getAge();
} else {
return o2.getName().compareTo(o1.getName());
}
}
});
然后用迭代器遍历输出列表数据
Iterator<
ComparatorDemo > iterator = bianliang.iterator();
while (iterator.hasNext()) {
ComparatorDemo conpar = iterator.next();
System.out.println(conpar.getName()+"\t"+
conpar.getAge());
}
Comparable和Comparator的关系:
Comparable(这个类是自己定义的,是要一些原生的类的话,定义到内部:class
ComparableDemo implements Comparable {):是写在你要排序的那个类的内部,那个类要实现这个comparable的接口,需要修改那个类原来的类代码,如果没法修改。就使用Comparator 。
Treemap和treeset一致,里面的 Comparable也是实现那个接口(然后再实现的那个方法里写从小到大的排序),treemap直接排序,不用.sort排序,Treemap是用Map<Integer(键的类型),string(值的类型)> 变量 = new 集合<>();用Set kSet= map.keySet();排序排的是key的部分
Comparator(是不需要改原方法的,只需要在外部写:Collections.sort(persons,new Comparator() {
(接下来都是实现接口里面的方法)):如果修改不了就使用comparator,不用修改原来的类,只需要在调用sort方法的时候再传入你的排序规则就行了
TreeMap Comparator排序示例代码传入comparator的实例
Treemap是用Map<Integer(键的类型),string(值的类型)>变量= new集合<>(new Comparator<变量>)把这句代码作为参数转到构造器里面,List那边的Comparator是放在cellections.sort里面的.