排序自定义类型元素的集合

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* 排序自定义类型元素的集合
* @author LZQ
*
*/
public class SortListDemo1 {
public static void main(String[] args) {
List<Point> list = new ArrayList<Point>();
list.add(new Point(4,2));
list.add(new Point(2,3));
list.add(new Point(1,4));
list.add(new Point(6,7));
list.add(new Point(9,3));
list.add(new Point(8,1));

System.out.println(list);
/*
* sort方法要求集合元素必须实现Comparable
* 接口,该接口用于规定实现类是可以比较的。
* 其有一个方法是用来定义比较大小的规则。
*
* 我们想使用sort方法排序集合,但是该方法要求
* 我们的集合元素必须实现Comparable接口并且
* 定义比较规则,这种我们想使用某个功能,而它
* 要求我们修改程序的现象称为"侵入性"。
* 修改的代码越多,侵入性越强,不利于程序
* 的扩展。
*/
Collections.sort(list);

System.out.println(list);
}
}

 

 

<br/>

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
*
* @author LZQ
*
*/
public class SortListDemo2 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
// list.add("jerry");
// list.add("tom");
// list.add("merry");
// list.add("rose");
// list.add("jack");
// list.add("Bilibili");
// list.add("lady gaga");
// list.add("koby");
// list.add("JACKSON");
// list.add("JAMES");
list.add("苍老师");
list.add("范老师");
list.add("小泽老师");

System.out.println(list);
MyComparator com = new MyComparator();
/*
* 重载的sort方法要求传入一个额外的比较器
* 该方法不再要求集合元素必须实现Comparable
* 接口,并且也不再使用集合元素自身的比较规则
* 排序了,而是根据给定的这个额外的比较器的比较
* 规则对集合元素进行排序。
* 实际开发中也推荐使用这种方式排序集合元素,若
* 集合元素是自定义的。
* 创建比较器时也推荐使用匿名内部类的形式。
*/
Collections.sort(list,com);
System.out.println(list);
//匿名内部类形式创建
Comparator<String> com1 = new Comparator<String>() {

public int compare(String o1, String o2) {
return o2.length()-o1.length();
}

};
Collections.sort(list,com1);
System.out.println(list);
}
}


/**
* 定义一个额外的比较器
* @author LZQ
*
*/
class MyComparator implements Comparator<String>{
/**
* 该方法用来定义o1和o2的比较
* 若返回值>0:o1>o2
* 若返回值<0:o1<o2
* 若返回值=0:两个对象相等
*/
public int compare(String o1, String o2) {
/*
* 字符串中字符多的大
*/
return o1.length()-o2.length();
}

}

posted @ 2020-05-13 19:30  two_q  阅读(160)  评论(0)    收藏  举报