集合排序 Comparator Comparable

复习,顺便记录下来!

通过Collections.sortArrays.sort 对对象排序时,有两种方式,排序对象实现Comparable接口重写compareTo方法和给sort方法传递实现Comparator接口的参数,下面的SortObject对象,实现了这两中方法。

package oliver.java.test.sort; import java.util.Comparator; /** * <b>SortObject。</b> * <p><b>详细说明:</b></p> * <!-- 在此添加详细说明 --> * 无。 * <p><b>修改列表:</b></p> * <table width="100%" cellSpacing=1 cellPadding=3 border=1> * <tr bgcolor="#CCCCFF"><td>序号</td><td>作者</td><td>修改日期</td><td>修改内容</td></tr> * <!-- 在此添加修改列表,参考第一行内容 --> * <tr><td>1</td><td>Oliver</td><td>2010-10-29 下午12:05:36</td><td>建立类型</td></tr> * * </table> * @version 1.0 * @author Oliver * @since 1.0 */ public class SortObject implements Comparable<SortObject> { //id计数器 private static int counter=0; private int id; private String name; /** * <b>构造方法。</b> * <p><b>详细说明:</b></p> * <!-- 在此添加详细说明 --> * 无。 */ public SortObject() { id=counter++; } public SortObject(String name) { this(); this.name=name; } /** * <b>compareTo。</b> * <p><b>详细说明:根据name自然顺序排序,如果name相同就根据id排序</b></p> * @see java.lang.Comparable#compareTo(java.lang.Object) */ public int compareTo(SortObject o) { if(this.name.equals(o.getName())){ return this.id-o.getId(); }else{ return this.name.compareTo(o.getName()); } } /** * <b>SortObjectComparator。</b> * <p><b>详细说明:内部实现Comparator的类</b></p> * <!-- 在此添加详细说明 --> * 无。 * <p><b>修改列表:</b></p> * <table width="100%" cellSpacing=1 cellPadding=3 border=1> * <tr bgcolor="#CCCCFF"><td>序号</td><td>作者</td><td>修改日期</td><td>修改内容</td></tr> * <!-- 在此添加修改列表,参考第一行内容 --> * <tr><td>1</td><td>Oliver</td><td>2010-10-29 下午02:14:58</td><td>建立类型</td></tr> * * </table> * @version 1.0 * @author Oliver * @since 1.0 */ static class SortObjectComparator implements Comparator<SortObject> { public int compare(SortObject o1, SortObject o2) { if(o1.getName().equals(o2.getName())){ return o1.getId()-o2.getId(); }else{ return o1.getName().compareTo(o2.getName()); } } } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "[ " + name + ":"+id+"]"; } }

测试代码:

package oliver.java.test.sort; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class TestMain { @SuppressWarnings("unchecked") public static void main(String[] args) { List sortList=new ArrayList(Arrays.asList(new SortObject("Jhon"), new SortObject("Oliver"), new SortObject("David"), new SortObject("Oliver"), new SortObject("Lucy"), new SortObject("Mark"), new SortObject("Oliver") )); System.out.println("before sort:"+sortList.toString()); //下面这两句效果相同 //Collections.sort(sortList); Collections.sort(sortList,new SortObject.SortObjectComparator()); System.out.println("after sort:"+sortList.toString()); } }

你可能感兴趣的:(list,String,table,Class,border,2010)