Set集合排序
阿新 • • 發佈:2018-11-16
TreeSet
TreeSet中儲存的型別必須是一致的,不能一下存int,一下又存string 當向TreeSet中新增自定義物件時,有2種排序方法,1:自然排序 2、定製排序 自然排序:要求自定義類實現java.lang.Comparable介面並重寫compareTo(Object obj)方法。在此方法中,指明按照自定義類的哪個屬性進行排序
1.自然排序
@Test public void t1(){ Set<String> s = new TreeSet<String>(); s.add("d"); s.add("a"); s.add("e"); s.add("c"); s.add("b"); System.out.println(s); }
輸出結果:
2.倒序
若想它倒序輸出,可以指定一個規則讓他倒序輸出
@Test public void t2(){ Set<String> set = new TreeSet<String>(new MyComparator()); set.add("a"); set.add("b"); set.add("c"); set.add("d"); set.add("e"); set.add("A"); for(Iterator<String> iterator = set.iterator(); iterator.hasNext();){ System.out.print(iterator.next()+" "); } } class MyComparator implements Comparator<String> { @Override public int compare(String o1, String o2) { return o2.compareTo(o1);//降序排列 } }
輸出結果:
如果Set集合中放入的是我們自己定義的一個類型別呢?
注意:一定要定義一個排序規則類實現Comparator介面,與上面的方法類似
@Test public void t3(){ Set<Person> set = new TreeSet<Person>(new PersonComparator()); Person p1 = new Person(10); Person p2 = new Person(20); Person p3 = new Person(30); Person p4 = new Person(40); set.add(p1); set.add(p2); set.add(p3); set.add(p4); for(Iterator<Person> iterator = set.iterator();iterator.hasNext();){ System.out.print(iterator.next().score+" "); } } class Person{ int score; public Person(int score){ this.score = score; } public String toString(){ return String.valueOf(this.score); } } class PersonComparator implements Comparator<Person>{ @Override public int compare(Person o1, Person o2) { return o1.score - o2.score; } }
如果按分數倒序排列,只需要更改compare方法中的o2.score-o1.score