java自定义容器排序的两种方法
2014-09-04 14:19
218 查看
首先说一下排序的返回值的含义。对于参与比较的两个Object,o1和o2,如果函数的返回值为正值,把o1排在o2后面;返回值为负值,把o1排在o2前面。如果返回值是0,按照容器之前的顺序排列。在compareTo中,this相当于o1,传入的Object相当于o2
第一种方法:对于要排序的类实现Comparable接口
第二种方法:覆盖Comparator中的compare方法。
第一种方法:对于要排序的类实现Comparable接口
package sort; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; //采用实现Comparable接口的方法实现排序 class S1 implements Comparable{ int x; int y; S1(int x, int y){ this.x = x; this.y = y; } //实现排序方法。先比较x,如果相同比较y @Override public int compareTo(Object o) { S1 obj = (S1) o; if(x != obj.x) { return x - obj.x; } return y - obj.y; } //重写toStirng方法,改变println时的显示效果 public String toString(){ return "("+x+", "+y+")"; } } public class Sort1 { public static void main(String[] args) { List<S1> s1Set = new ArrayList<S1>(); S1 s1 = new S1(3,5); S1 s2 = new S1(2,5); S1 s3 = new S1(2,2); s1Set.add(s1); s1Set.add(s2); s1Set.add(s3); //对容器进行排序的函数 Collections.sort(s1Set); Iterator it = s1Set.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } }
第二种方法:覆盖Comparator中的compare方法。
package sort; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; class S2{ int x; int y; S2(int x, int y){ this.x = x; this.y = y; } //重写toStirng方法,改变println时的显示效果 public String toString(){ return "("+x+", "+y+")"; } } public class Sort2 { public static void main(String[] args) { List<S2> s2Set = new ArrayList<S2>(); S2 s1 = new S2(3,5); S2 s2 = new S2(4,5); S2 s3 = new S2(4,2); s2Set.add(s1); s2Set.add(s2); s2Set.add(s3); //对容器进行排序的函数 Collections.sort(s2Set,c); Iterator it = s2Set.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } static Comparator<S2> c = new Comparator(){ public int compare(Object a0, Object a1) { S2 s1 = (S2) a0; S2 s2 = (S2) a1; if(s1.x != s2.x) { return s1.x - s2.x; } else { return s1.y - s2.y; } } }; }
相关文章推荐
- Java编程之TreeSet排序两种解决方法(1)元素自身具备比较功能,元素需要实现Comparable接口覆盖compare(2)创建根据自定义Person类的name进行排序的Comparator
- Java容器Treeset的两种排序方法
- java Collections.sort()实现List排序的默认方法和自定义方法
- 用Java集合中的Collections.sort()方法对list排序的两种方法
- java Collections.sort()实现List排序的默认方法和自定义方法
- 用Java集合中的Collections.sort方法如何对list排序(两种方法)
- 用Java集合中的Collections.sort方法对list排序的两种方法
- java排序总结(Comparator、apache-common工具包两种方法)
- java中的equals和hashCode方法以及两种方法集合的排序
- java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)
- java排序的两种方法(数组排序)冒泡法和冒泡改进法
- java中对集合或数组进行排序有两种方法:Comparable 与 Comparator
- 用Java集合中的Collections.sort方法对list排序的两种方法
- Java:集合,对列表(List)中的自定义对象按属性(字段)排序(正序、倒序)的方法
- Java实现对象排序的两种方法
- Java Array.sort()两种重载的排序方法
- 用Java集合中的Collections.sort方法对list排序的两种方法
- (好使)用Java集合中的Collections.sort方法对list排序的两种方法
- java两种排序方法
- java Collections.sort()实现List排序的默认方法和自定义方法