java中的TreeSet集合
2015-11-19 18:40
567 查看
package com.atguigujaav2; import java.util.Collection; import java.util.Iterator; import java.util.TreeSet; /** * TreeSet实现了Set接口的子接口SortedSet,基本特征和HashSet类一样, * 只是增加了排序功能。 * */ public class TestTreeSet { public static void main(String[] args){ TreeSet s=new TreeSet(); s.add(5); s.add(30); s.add(8); s.add(1); s.add(25); print(s); } public static void print(Collection c){ Iterator iter=c.iterator(); while(iter.hasNext()){ Object obj=iter.next(); System.out.println(obj); } } } /** * 输出结果是:1、5、8、25、30 * 可见,TreeSet默认从小到大排序。 * */
</pre><pre name="code" class="java">
</pre><pre name="code" class="java"><pre name="code" class="java"> /** * 向TreeSet添加的元素的数据类型必须实现处于java.Lang包下的Comparable接口, * 也就是要实现接口中的抽象方法,否则程序出现java.lang.ClassCastException异常。 * API中的String 类型和封装类型已经实现了Comparable接口,接口中职业一个抽象方法: * public int compareTo(Object o),用来实现排序规则。如果不之下安该抽象方法 * java就不知道如何排序,就会出现java.lang.ClassCastException异常。 * 同时也要重写hashCode()方法和equals()方法。 * */ package com.atguigujaav2; import java.util.Collection; import java.util.Iterator; import java.util.TreeSet; /** * 向TreeSet集合中添加自定义的数据类型 * */ public class TestTreeSet1 { public static void main(String[] args){ TreeSet s=new TreeSet(); s.add(new Student2(1004,"zhaoliu")); s.add(new Student2(1001,"zhangsan")); s.add(new Student2(1003,"wangwu")); s.add(new Student2(1002,"lisi")); s.add(new Student2(1001,"zhangsi")); s.add(new Student2(1001,"zhangsan")); print(s); } public static void print(Collection c){ Iterator iter=c.iterator(); while(iter.hasNext()){ Object obj=iter.next(); System.out.println(obj); } } } class Student2 implements Comparable{ int id; String name; public Student2(){ } public Student2(int id,String name){ this.id=id; this.name=name; } public String toString(){ return "id:"+id+'\t'+"name:"+name; } //重写equals()方法 public boolean equals(Object obj){ if(obj==null){ return false; } if(obj==this){ return true; } if(!(obj instanceof Student2)){ return false; } Student2 s=(Student2)obj; return (s.id==this.id&&s.name.equals(this.name)); } //重写hsahCode()方法 public int hashCode(){ return id*name.hashCode(); } //重写compareTo()方法 public int compareTo(Object o){ Student2 s=null; if(o instanceof Student2){ s=(Student2)o; } int result=0; result=this.id>s.id?1:(this.id==s.id?0:-1); if(result==0){ result=this.name.compareTo(s.name); } return result; } }
<pre name="code" class="java">/*** 向TreeSet中添加自定义一数据类型的元素时,除了可以实现Comparable接口,* 还可以使用比较器的方式来实现排序,具体做法是:定义比较器类实现java.util包下的* Comparator接口,重写其中的抽象方法compare(Object o1,Object o2)* 来定义比较规则,然后在实例化TreeSet对象调用TreeSet的有残构造器,在构造器中传递一个* 比较器对象即可.* */package com.atguigujaav2;import java.util.Collection;import java.util.Comparator;import java.util.Iterator;import java.util.TreeSet;public class TestTreeSet2 {public static void main(String[] args){TreeSet s1=new TreeSet(new StudentComparator());s1.add(new Student3(1004,"zhaoliu"));s1.add(new Student3(1001,"zhangsan"));s1.add(new Student3(1003,"wangwu"));s1.add(new Student3(1002,"lisi"));s1.add(new Student3(1001,"zhangsi"));s1.add(new Student3(1001,"zhangsan"));print(s1);}public static void print(Collection c){Iterator iter=c.iterator();while(iter.hasNext()){Object obj=iter.next();System.out.println(obj);}}}class Student3{int id;String name;public Student3(){}public Student3(int id,String name){this.id=id;this.name=name;}//重写equals方法public boolean equals(Object obj){if(obj==null){return false;}if(obj==this){return true;}if(!(obj instanceof Student3)){return false;}Student3 s=(Student3)obj;return (s.id==this.id&&s.name.equals(this.name));}//重写hashCode方法public int hashCode(){return id*name.hashCode();}public String toString(){return "id:"+id+'\t'+"name:"+name;}}class StudentComparator implements Comparator{public int compare(Object arg0,Object arg1){Student3 s1=(Student3)arg0;Student3 s2=(Student3)arg1;int result=0;result=s1.id>s2.id?1:(s1.id==s2.id?0:-1);if(result==0){result=s1.name.compareTo(s2.name);}return result;}}
</pre><pre name="code" class="java">
相关文章推荐
- 简单项目开发之一(springmvc+filter)
- Eclipse常见错误
- java学习笔记2
- MyEclipse 2015 stable 2.0 下载 破解激活
- java二分查找方法
- struts框架设计
- java插入排序方法
- java选择排序方法
- java冒泡排序方法
- JavaSE__Jdbc关闭
- java 每日习题(六)从文件收集数据记录到mysql
- Java中利用socket实现简单的服务端与客户端的通信(入门级)
- idea类似eclipse鼠标提示java api信息
- Java获取操作系统信息和Java版本信息
- Spring MVC学习一
- 运行时java对象在内存中是什么样子的?
- eclipse和myeclipse下main方法找不到主类的一种情况
- JAVA NIO:Path ,File
- 简单的安卓手势处理类
- java 选择排序法