数据结构-Set
TreeSet结构
import java.util.*;
//Comparable接口强行对实现它的每个类的对象进行整体的排序
//此排序被称为该类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
//Comparable接口强行对实现它的每个类的对象进行整体的排序
//Comparator接口,比较函数强行对某些对象 collection 进行整体排序
//public int compare(Object o1,Object o2) 用来比较排序的两个参数。
//可以将 Comparator 传递给 sort 方法(如 Collections.sort),
//从而允许在排序顺序上实现精确控制。
//还可以使用 Comparator 来控制某些数据结构(如 TreeSet 或 TreeMap)的顺序。
class Person implements Comparable{
private int age;
private String name;
public Person(int age,String name){
this.age=age;
this.name=name;
}
public String toString(){
return age + ":" + name;
}
public int compareTo(Object o){
if(! (o instanceof Person)) return 1;
Person p=(Person)o;
return name.compareTo(p.name) *1000 + (this.age-p.age);
}
}
// 判定标准? HashSet 有标准,TreeSet有标准
// HashSet: 1.hashCode()撞吗? equals() true吗?
// TreeSet: 内部进行了排序,在排序中发现重复 重写public int compareTo(Object o)方法
public class TreeSetTest{
public static void main(String[] args){
Set a=new TreeSet();
a.add(new Person(23,"zhangsan"));
a.add(new Person(23,"li"));
a.add(new Person(15,"saf"));
a.add(new Person(4,"hbdf"));
a.add(new Person(56,"zhangsan"));
a.add(new Person(23,"zhangsan"));
Iterator iter=a.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}
}
//------------------------------------------------------------
HashSet结构
import java.util.*;
class Person{
private int age;
private String name;
public Person(int age,String name){
this.age=age;
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public String toString(){
return "age="+age+" : " + "name=" + name;
}
//-------
public boolean equals(Object o){
if(!(o instanceof Person)) return false;
Person p=(Person)o;
return this.age==p.getAge() && this.name==p.getName();
}
public int hashCode(){
return this.name.hashCode();
}
//--------
}
//HashSet 集合,不能重复,没有顺序
public class HashSetTest{
public static void main(String[] args){
Set a=new HashSet();
a.add(new Person(23,"zhangsan"));
a.add(new Person(23,"li"));
a.add(new Person(15,"saf"));
a.add(new Person(4,"hbdf"));
a.add(new Person(56,"zhangsan"));
a.add(new Person(23,"zhangsan"));
//在这里为什么有重复?
//重复的判定标准不一样,HashSet,TreeSet各有标准
//必须重写其父类的equals()和hashCode()方法,才能判断集合中不重复
Iterator iter=a.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
}
}
浙公网安备 33010602011771号