#日常练习
关于TreeSet的小练习
TreeSet结构底层实现:在添加元素时会自动调用compareTo方法,
所以,TreeSet存储的是按自定义排列方法排列有序的结构实现;
TreeSet在比较时若返回0则认为两元素相同,后来的不会被存储;
String类型预先定义了自己的比较方法(按字典序比较),很多类型都预定义了自己的比较方法;
package Collection;
import java.util.*;
public class TreeSetTest {
public static void main(String[] args) {
TreeSet<Administrator> ts = new TreeSet<Administrator>();
//TreeSet结构底层实现:在添加元素时会自动调用compareTo方法,
//所以,TreeSet存储的是按自定义排列方法排列有序的结构实现;
//TreeSet在比较时若返回0则认为两元素相同,后来的不会被存储;
//String类型预先定义了自己的比较方法(按字典序比较),很多类型都预定义了自己的比较方法;
ts.add(new Administrator(123,"person1"));
ts.add(new Administrator(456,"person2"));
ts.add(new Administrator(789,"person3"));
ts.add(new Administrator(258,"person4"));
for(Iterator<Administrator> it = ts.iterator();it.hasNext();) {
Administrator a = it.next();
System.out.println(a.getCount()+"-->"+a.getName());
}
}
}
被调用类
package Collection;
//将自定义类存入TreeSet中时,自定义类必须实现Comparable接口
class Administrator implements Comparable<Administrator>{
private int count;
private String name;
Administrator(int count,String name){
this.count = count;
this.name = name;
}
//复写Object类中compareTo方法,定义自己的比较方法。
public int compareTo(Administrator adm) {
if(!(adm instanceof Administrator)) {
throw new RuntimeException("传入的类类型错误!");
}
if(this.getCount() > adm.getCount()) {
return 1;
}
if(this.getCount() == adm.getCount()) {
this.getName().compareTo(adm.getName());
return 0;
}
return -1;
}
public int hashCode() {
return this.count+this.name.hashCode();
}
public boolean equals(Object obj) {
if(!(obj instanceof Administrator)) {
throw new RuntimeException("传入的类类型错误!");
}
Administrator adm = (Administrator)obj;
//按照账号和姓名都相同时判断为相同对象;
return(this.count == adm.count && this.name.equals(adm.name)) ;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2017/1/17更新:学习了泛型,完善了代码,功能没变。