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

Java集合(三)TreeSet的使用

2016-03-25 14:28 471 查看
package com.pason.treeset;

import java.util.Comparator;
import java.util.TreeSet;

/*
* TreeSet容器和HashSet一样都不能放重复的对象
* 最主要的是TreeSet中的对象要求必须能自己排序(排序方式要自己定义)
* String类已经实现Comparable,所以不用自己定义
* 所以TreeSet使用的时候更注重Comparable的实现
* 在比较的时候,如果比较结果返回0那么只能加入1个对象
*/
public class TreeSetDemo {
public static void main(String[] args) {
//如果容器中的元素不定义比较规则
//这时候会报Exception in thread "main"
//java.lang.ClassCastException,原因是User类不会自己排序

//我们要实现Comparable接口才能add
//Java中有两种排序的比较器
//1)java.lang.Comparable
TreeSet<User> user = new TreeSet<User>();
User user1 = new User("Pason",123);
User user2 = new User("Wade",456);
User user3 = new User("Lee",789);
user.add(user1);
user.add(user2);
user.add(user3);
user.add(user2);
System.out.println(user);
//2)java.util.Comparator
//TreeSet构造的时候,把Comparator作为构造器的参数

/**
*  第二种写法(匿名内部类,也可以在外部写一个类实现Comparator接口,然后在本类内new一个对象传入TreeSet构造器)
*  TreeSet<User> user= new TreeSet<User>(new Comparator<User>() {
*
*			public int compare(User arg0, User arg1) {
*				return arg0.getName().compareTo(arg1.getName());
*			}
*		} );
*	User user1 = new User("Pason",123);
*	User user2 = new User("Wade",456);
*	User user3 = new User("Lee",789);
*	user.add(user1);
*	user.add(user2);
*	user.add(user3);
*	System.out.println(user);
*
*/

}

}

package com.pason.treeset;

class User implements Comparable<User> {
private String name;
private int id;

public User(String name, int id) {
super();
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "Student [name=" + name + ", id=" + id + "]";
}
//重写compareTo方法
public int compareTo(User arg0) {
//自己定义,只要不同就要返回非0值
if (!this.name.equals(arg0.name))
return this.name.compareTo(arg0.name);
return 0;
}

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