java中解决treeset类的排序问题

java中解决treeset类的排序问题

ID:27582464

大小:120.77 KB

页数:8页

时间:2018-12-04

java中解决treeset类的排序问题_第1页
java中解决treeset类的排序问题_第2页
java中解决treeset类的排序问题_第3页
java中解决treeset类的排序问题_第4页
java中解决treeset类的排序问题_第5页
资源描述:

《java中解决treeset类的排序问题》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Java中解决TreeSet类的排序问题TreeSet支持两种排序方法:自然排序和定制排序。TreeSet默认釆用自然排序。1、自然排序TreeSet会调用集合元素的compareTo(Objectobj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然排序。(比较的前提:两个对象的类型相同)。java提供了一个Comparable接U,该接U里定义了一个compareTo(Objectobj)方法,该方法返冋一个整数值,实现该接口的类必须实现该方法,实现了该接口的类的对象就可以比较大小。当一个

2、对象调用该方法与另一个对象进行比较,例如obj1.comparTo(obj2),如果该方法返回0,则表明这两个对象相等;如果返回一个正整数,则表明obj1大于obj2;如果该方法返[nJ—个负整数,则表明obj1小于obj2.java常用类实现Comparable接口,并提供了比较大小的标准。实现Comparable接口的常用类:•BigDecimal、Biglneger以及所有数值型对应包装类:按它们对应的数值的大小进行比较。•Character:按字符的UNICODE值进行比较。•Boolean:true对应的包

3、装类实例人于false对应的包装类实例。•String:按字符串屮字符的UNICODE值进行比较。•Date、Time:后面的时间、円期比前面的时间、円期大。如果试图把一个对象添加进TreeSet时,则该对象的类必须实现Comparable接如下程序则会报错:class{Err}publicclassTcstTrccSctError1publicfstaticvoidmain(String[]args)TreeSetts=newTreeSet();//向TreeSet集合屮添加两个Err对象10ts.add(newE

4、rr());11ts.add(newErr());12}13}说明:上面程序试图向TreeSet集合中添加2个Err对象,添加第一个对象时,TreeSet里没有任何元素,所以没有问题;当添加第二个Err对象时,TreeSet就会调用该对象的compareTo(Objectobj)方法与集合中其他元素进行比较如果对应的类没有实现Comparable接门,则会引发ClassCastException异常。而且当试图从TreeSet中淑出71I素第一个71I素时,依然会引发ClassCastException异常。当采用c

5、ompareTo(Objectobj)方法比较对象时,都需要将被比较对象obj强制类型转换成相同类型,因为只冇相同类的两个实例才能比较人小。即向TreeSet屮添加的应该是同一个类的对象,否则会引发ClassCastException异常。例如,当向TreeSet中添加一个字符申对象,这个操作完全正常。当添加第二个Date对象时,TreeSet就好调用该对象的compareTo(Objectobj)方法与集合中其他元素进行比较,则此吋程序会引发异常。在实际编程中,程序员可以定义自己的类向TreeSet中添加多种类型的

6、对象,前提是用户自定义类实现了Comparable接口,实现该接口时在实现compareTo(Objectobj)方法时没有进行强制类型转换。但当操作TreeSet里的集合数据时,不同类型的元素依然会发生ClassCastExceptio异常。(认真阅读下就会明白)当把一个对象加入TreeSet集合中吋,TreeSet调用该对象的compareTo(Object0即方法与容器屮的其他对象比较大小,然后根据红黑树算法决定它的存储位置。如果两个对象通过compareTo(Objectobj)比较相等,TreeSet即认为

7、它们存储同一位罝。对于TreeSet集合而言,它判断两个对象不相等的标准是:两个对象通过equals方法比较返冋false,或通过compareTo(Objectobj)比较没存返冋0即使两个对象时同一个对象,TreeSet也会把它们当成两个对象进行处理。如下程序所示:1//Z类,重写了equals方法,总是返回false,2//重写了compareTo(Objectobj)方法,总是返回正整数3classZimplementsComparable4{5intage;6publicZ(intage)7{8this.a

8、ge=age;9}lOpublicbooleanequals(Objectobj)11{12returnfalse;13}14public15{intcompareTo(Objectobj)16return17}18}1;19public20{classTestTreeSet21public22{staticvoidmain(String[]2

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。