您的位置:首页 > 编程语言 > Java开发

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">

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: