treeset自然排序和定制排序,java treeset自定义排序
TreeSet是一个有序的集合,它支持自然排序和根据实现Comparator或Comparable接口进行排序。下面通过案例来看一下TreeSet的使用
1.用TreeSet保存字符串类型数据。默认情况下,保存顺序按字母升序排序。
在本例中,您将定义一个TreeSet集合,向该集合添加多个字符串,然后遍历并输出该集合(first) (method and last)以获取该集合的第一个和最后一个元素。
包com . Jing LAN . sort;导入Java . util . treeset;publiclasstreesettedemo { PublicStaticVoidMain(string[]args)//bed frame TreeSet对象,统称为StringTreeSetstringset=ngstrsetset . add(Python);strset . add( c );srset . add(JavaScript);//循环输出(strings:strSet)system . out . println(s’)的strSet的值;} system . out . println(;//返回集合中的第一个元素。默认情况下,最小的元素System.out.println(集合中的第一个元素: strSet.first )按升序排列;//返回集合中的最后一个元素,默认为最大的元素System.out.println(集合中的最后一个元素: strset . Last));}[运行结果]
使用TreeSet保存整数类型的数据。默认情况下,保存顺序按最小的数字排序。
此示例定义一个TreeSet对象,将整数数据添加到集合中,然后输出集合对象。即把数据放入[]进行输出。这是集合的默认输出格式。最后,使用floor()方法获取并输出集合中最大元素小于或等于指定元素的值。
代码如下。
包com . Jing LAN . sort;导入Java . util . treeset;publiclasstreesettedemo { PublicStaticVoidMain(string[]args)//bed frame TreeSet对象,统称为IntegerTreeSettingtegerinset=int set . add(5;int set . add(8);int set . add(-1;//循环输出(inti:intSet)system . out . println(I )的int set的值;} system . out . println(;//集合中最大的元素小于等于给定的元素,否则等于该元素则返回null system . out . println(return)):" intset . floor(2)" system . out . println system . out . println(如果没有符合要求的元素(intset . floor(-2)));}[运行结果]
描述:
1、地板(关于方法。对于intset.floor(10),输出结果是10,因为集合中的元素等于10。对于intset.floor(2),如果集合中没有2,则小于2的最大元素为-1,所以输出结果为-1。如果是intset.floor(-2),则输出结果为空,因为集合中没有低于-2的元素。
2,floor))方法相同,TreeSet中有一个更高的))方法,返回集合中比给定元素更严格的最小元素,没有子元素时返回null。
3.向TreeSet添加自定义类对象时,如何排序?
现在,您必须实现Comparable和Comparator接口来指定按哪个属性排序,以及是按升序还是降序排序。
以比较器界面为例,可以按年龄对人对象进行排序。
定义人员类别。包括三个属性:数字,名字和年龄,以及构造方法,get和set (method,toString))方法等。
,定义人员类别,实现年龄的升序排序。
在test类的main方法中,定义五个Person类对象,将它们添加到TreeSet集合中,显示集合中的所有元素,然后使用pollFirst()方法返回到集合中的第一个元素并删除它。
[波士顿部门]
包com . Jing LAN . sort;类人员{ privatestringid//No.private字符串名称;//命名私有入口;//Age public person(} public person(String id,String name,int age)) {this.id=
id;this.name=namethis.age=年龄;}公共字符串getId(){ return id;} public void setId(String id){ this . id=id;} public String getName(){ return name;} public void set name(String name){ this . name=name;} public int getAge(){ return age;} public void setAge(int age){ this . age=age;} @ override public String to String(){ return Person[id= id ,name= name ,age= age ];}} [personcomparator类]
包com。静兰。排序;导入Java。util。比较器;公共类个人比较器实现比较者Person { public int compare(Person O1,Person O2){ int age 1=O1。getage();int age 2=O2。getage();回归年龄1-2;}} 【测试类】
包com。静兰。排序;导入Java。util。treeset公众的类人员测试{ public static void main(String[]args){//创建人对象人员p1=新人员(‘001’,‘fddyb’,18);人p2=新人( 002 ,麦克,20);人p3=新人( 003 ,杰克,17);人p4=新人(‘004’,‘zxdyj’,19);人员p5=新人(‘005’,‘比尔’,21);TreeSetPerson personSet=new TreeSet(new person comparator());人员集。添加(P1);人员集。添加(p2);人员集。添加(P3);人员集。添加(P4);人员集。添加(P5);System.out.println(显示集合所有元素:);for(Person p:Person set){ system。出去。println(p);}System.out.println(检索并删除第一个元素:);//pollFirst()检索并删除集合第一个元素,如果集合为空则返回零系统。出去。println(人员集。先投票());System.out.println(显示所有集合:);for(Person p:Person set){ system。出去。println(p);}}} 【运行结果】
说明:
1、注意创建合框架对象时,要指定比较仪接口的实现类作为参数
TreeSetPerson personSet=new TreeSet(new person comparator());2、这里使用了民意优先()方法,该方法比较特殊,可以返回元素,但是又把这个元素删除了,所以再次循环输出就没有年龄为17的元素了
3、还有一个方法pollLast(),该功能是检索并删除最后一个元素,如果集合为空则返回空,该方法的使用方式与民意优先()类似
4、如果要对年龄进行降序排序,可以将人员比较类里一岁和2岁的顺序进行调换。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。