我们知道集合Set可以存储一系列对象,如int和class,它们是无序的、不可重复的。 今天是Set可不可以排序,怎样自定义排序规则
首先,窃取说明Set继承关系的图:
今天主要讨论SortedSet的使用方法。
(注意:上图是借口,需要使用它们的实现类)
让我们实现SortedSet的排序。
公共类测试{ publicstaticvoidmain (字符串[ ] args ) ) treesetstringset=newtreesetstring ); set.add(b ); set.add(d ); set.add(a ); set.add(e ); set.add(c ); system.out.println(set ); }结果是什么,[A,b,c,d,E]。
按照字母顺序排列。 那么,如果想让我对叙利亚进行排序,就必须在这里自定义排序规则。
//此时TreeSet的构建方法之一//comparator :这就是自定义排序规则publictreeset(comparator? superecomparator(this ) new treemap (comparator ); }接下来测试一下吧;
public class test { publicstaticvoidmain (字符串[ ] args ) { //new个自定义comparatortreesetstringset=newtreesetstring ) newmmew set.add(d ); set.add(a ); set.add(e ); set.add(c ); system.out.println(set ); } classmycomparatorimplementscomparator { @ overridepublicintcompare (objecto 1,Object o2 ) stringS1=(string ) O1; stringS2=(string ) o2; //逆序returnS2.comPareto(S1 ); }结果与明确: [E、d、c、b、A]
这是非常简单的事情。 如果我们使用自定义class,例如Person类,它要求我们按age进行排序。 让我们看看如何实现:
公共类测试{ publicstaticvoidmain (字符串[ ] args )//自定义排序规则treesetpersonset=newtreesetperson ) newmycomparator ) set.add(newPerson ) ' d ',10 ); set.add(newPerson ) ' e ',40 ); set.add (新人员) ' c ',50 ); set.add (新人员) ' b ',30 ); system.out.println(set ); }}class Person{ String name; int age; 公共人员(字符串名称,int age ) { this.name=name; this.age=age; } @重写}@override//tostring方法并创建输出格式: public String toString () { return 'name:' name、age=' age; } classmycomparatorimplementscomparator { @ overridepublicintcompare (objecto 1,Object o2 ) person P1=(person ) O1; 人员2=(人员) o2; //自定义比较规则返回(int ) ) p1.age-p2.age ); }结果:
[name:D,age=10,name:A,age=20,name:B,age=30,name:E,age=40,name:C,age=50]
达到了我们希望的结果。
Set排序到此结束。