java treeset集合_java中的TreeSet集合

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默认从小到大排序。

* */

 
 

/**

* 向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;

}

}

/**

* 向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;

}

}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值