在这之前,首先来说一下用Android Studio来调试Java程序,控制台出现乱码的问题。至于怎么用Android Studio创建Java程序,网上很多。
public class JavaBase {public static void main(String[] args) {System.out.println("排序前" );}}
运行程序后,在控制打印出来的结果却是:
试了各种方法,都不行,网上的各种方法都是针对Android Project的,最后尝试了下面的方法:
红色箭头的位置,改为GBK就OK了。
下面是对自定义User对象排序的代码:
package com.jackie.java.base;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class JavaBase {public static void main(String[] args) {User user1 &#61; new User("Jackie", 25);User user2 &#61; new User("Jim", 18);User user3 &#61; new User("Lucy", 30);User user4 &#61; new User("Kate", 18);// System.out.print(user1.compareTo(user2));List users &#61; new ArrayList<>();users.add(user1);users.add(user2);users.add(user3);users.add(user4);System.out.println("排序前" );for (User user : users) {System.out.println(user.getName() &#43; " " &#43; user);}Collections.sort(users);System.out.println("排序后" );for (User user : users) {System.out.println(user.getName() &#43; " " &#43; user);}}
}
出现了下面的异常:
很明显&#xff0c;Java中不允许直接对自定义的对象调用sort直接排序&#xff0c;需要实现Comparable接口。按照上面的方法改造一下User.java
方法一&#xff1a;让User对象实现Comparable接口
package com.jackie.java.base;/*** Created by Jackie on 2015/12/21.*/
public class User implements Comparable {private String name;private int age;public User() {}public User(String name, int age) {this.name &#61; name;this.age &#61; age;}public String getName() {return name;}public int getAge() {return age;}public void setName(String name) {this.name &#61; name;}public void setAge(int age) {this.age &#61; age;}&#64;Overridepublic int compareTo(User user) {return age - user.getAge();}
}
调用方法&#xff1a;
Collections.sort(users);
方法二&#xff1a;User对象不作任何改动&#xff0c;添加一个比较器UserComparator.java
package com.jackie.java.base;import java.util.Comparator;/*** Created by Jackie on 2015/12/21.*/
public class UserComparator implements Comparator {&#64;Overridepublic int compare(Object o1, Object o2) {User user1 &#61; (User) o1;User user2 &#61; (User) o2;if (user1.getAge() > user2.getAge()) {return 1;} else if (user1.getAge() }
调用方法&#xff1a;
Collections.sort(users, new UserComparator());
结果如下&#xff1a;
顺便说一下Comparable和Comparator的区别&#xff1a;
1. Comparable和Comparator都是用来实现集合中元素的比较、排序的&#xff0c;只是Comparable是在集合内部定义的方法实现的排序&#xff0c;Comparator是在集合外部实现的排序&#xff0c;所以想要实现排序&#xff0c;就需要在集合外定义Comparator接口或在集合内实现Comparable接口两种方法。
2. Comparable实现的排序只能是自然排序&#xff0c;这里的自然顺序就是实现Comparable接口设定的排序方式&#xff08;Demo是按照年龄从小到大排序&#xff09;。而Comparator是一个专用的比较器&#xff0c;当这个对象不支持自比较或者自比较函数不能满足你的要求时&#xff0c;你可以写一个比较器来完成两个对象之间大小的比较。比如说&#xff0c;如果把上面的UserComparator.java的方法改为&#xff1a;
public class UserComparator implements Comparator {&#64;Overridepublic int compare(Object o1, Object o2) {User user1 &#61; (User) o1;User user2 &#61; (User) o2;if (user1.getAge() > user2.getAge()) {return -1;} else if (user1.getAge() }
输出的结果则是倒序的&#xff08;年龄从大到小&#xff09;
可以说一个是自已完成比较&#xff0c;一个是外部程序&#xff08;自定义比较规则&#xff09;实现比较的差别而已。