一、Comparable接口对实现它的实体类进行强制排序功能,这种排序称为类的自然排序,类的compareTo方法被称为自然排序方法;
二、Lists(和Arrays)数组中实现Comparable接口的类可以通过 Collections.sort (and Arrays.sort)进行自动排序,实现此接口的对象可以作为sorted map 的key或者做为 sorted set的元素,无需指定比较器;
三、对于自然排序类C大于类B就是c.compareTo(b)==1;
四、自然排序demo
package framework.yaomy.thread.example; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import framework.yaomy.thread.model.User; /** * @Description:TODO * @version 1.0 * @since JDK1.7 * @author yaomy * @company xxxxxxxxxxxxxx * @copyright (c) 2017 yaomy Co'Ltd Inc. All rights reserved. * @date 2017年8月31日 下午8:16:02 */ public class ComparableDemo { public static void main(String[] args) { User[] user = new User[3]; user[0] = new User(3, "朝阳3"); user[1] = new User(1, "朝阳1"); user[2] = new User(2, "朝阳2"); for(int i=0;i<3;i++){ System.out.println(user[i].getPriority()+"======="+user[i].getUsername()); } System.out.println("=================================="); Arrays.sort(user); for(int i=0;i<3;i++){ System.out.println(user[i].getPriority()+"======="+user[i].getUsername()); } System.out.println(user); System.out.println("/list/"); List<User> list = new ArrayList<User>(); list.add(new User(7, "朝阳7")); list.add(new User(4, "朝阳4")); list.add(new User(8, "朝阳8")); Collections.sort(list); for(User user1:list){ System.out.println(user1.getPriority()+"======="+user1.getUsername()); } } }
返回结果:
3=======朝阳3 1=======朝阳1 2=======朝阳2 ================================== 1=======朝阳1 2=======朝阳2 3=======朝阳3 /list/ 4=======朝阳4 7=======朝阳7 8=======朝阳8
实现Comparable接口的实体类:
package framework.yaomy.thread.model; /** * @Description:TODO * @version 1.0 * @since JDK1.7 * @author yaomingyang * @company xxxxxxxxxxxxxx * @copyright (c) 2017 yaomy Co'Ltd Inc. All rights reserved. * @date 2017年8月27日 上午10:33:48 */ public class User implements Comparable<User>{ private Integer priority; private String username; public User(Integer priority, String username) { this.priority = priority; this.username = username; } public Integer getPriority() { return priority; } public void setPriority(Integer priority) { this.priority = priority; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } /** * * @Description:当前对象和其他对象做比较,当前优先级大就返回-1,优先级小就返回1 * 值越小优先级越高 * @param TODO * @author yaomingyang * @date 2017年8月27日 上午11:28:10 */ @Override public int compareTo(User user) { // System.out.println("比较结果"+this.priority.compareTo(user.getPriority())); return this.priority.compareTo(user.getPriority()); } }