数据结构-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());
		}
	
	}
}
posted @ 2013-05-20 22:35  oyiya  阅读(222)  评论(0)    收藏  举报