本帖最后由 luguoyuanf 于 2013-4-9 08:02 编辑
Set集合 特点:无顺序存储和取出,不存储重复的元素,包括对象和自定义对象,此接口只能通过迭代器取出. 自定义对象满足条件: 1) 构造函数 2) set 3)get 4)toString 5)hashCode 6)equals 7)compareTo HashSet集合 特点: 1) 无顺序,不存储重复元素. 2) 判断重复元素的依据是对象中的hashCode和equals方法,线程不同步. 3)HashSet数据结构是哈希表,简称桶子结构. 步骤: 1)导包, 创建HashSet类型的集合. import java.util.*; //类外面 class HashSetDemo1{ public static void main(String[] args){ HashSet hs = new HashSet(); ........... } 2) 使用add()方法向内部添加元素. hs.add(newCarDemo("Audi",4); //hs集合内添加自定义类CarDemo对象并赋值 3) 覆写hashCode()方法. public int hashCode(){ //必须跟object类下的hashCode方法一样
int x = 3; //定义一个常量,用来跟door的哈希值相乘 return name.hashCode()+door *x; //返回int类型的哈希值 } 如果返回的哈希值跟集合内元素不同,则不执行equals方法,直接在集合内添加,反之equals判断. 4) 覆写equals方法. public boolean equals(Object obj){
CarDemo c = (CarDemo)obj; //将要比较的元素强制转换成定义类的类型 return this.name.equals(c.name) && this.door == c.door; //判断name和door是否相等 //this代表new CarDemo传的值,obj代表从集合中查找出来的一个元素 } 如果equals也判断跟集合内的元素相同,则示为相同不添加. 5) 覆写toString方法. public String toString(){ return name+"..."+door; } HashSet集合迭代器取元素时自动调用,如果不覆写则打印对象的地址哈希值. 6) 创建构造器取元素. Iterator i = hs.iterator(); while(i.hasNext()){ System.out.println(i.next()); //重写toString后可直接输出, }
TreeSet集合 特点: 1) 有序,将对象进行自然排序(123,abc) 2) 存储到TreeSet集合中的对象,必须具备比较性 3) 存储到TreeSet集合中的对象必须实现Comparable,覆盖compareTo方法 4) TreeSet集合在排列中,只参考对象中compareTo方法的返回值 5) TreeSet底层是二叉树结构 第一种方式步骤: 1)导包, 创建HashSet类型的集合. import java.util.*; //类外面 class TreeSetDemo1{ public static void main(String[] args){ TreeSet ts = new TreeSet(); ........... } 2) 使用add()方法向内部添加元素. hs.add(newCarDemo("Audi",4); //hs集合内添加自定义类CarDemo对象并赋值 3) 覆写hashCode()方法. public int hashCode(){ //必须跟object类下的hashCode方法一样
int x = 3; //定义一个常量,用来跟door的哈希值相乘 return name.hashCode()+door *x; //返回int类型的哈希值 } 如果返回的哈希值跟集合内元素不同,则不执行equals方法,直接在集合内添加,反之equals判断. 4) 覆写equals方法. public boolean equals(Object obj){
CarDemo c = (CarDemo)obj; //将要比较的元素强制转换成定义类的类型 return this.name.equals(c.name) && this.door == c.door; //判断name和door是否相等 //this代表new CarDemo传的值,obj代表从集合中查找出来的一个元素 } 如果equals也判断跟集合内的元素相同,则示为相同不添加. 5) 覆写toString方法. public String toString(){ return name+"..."+door; } HashSet集合迭代器取元素时自动调用,如果不覆写则打印对象的地址哈希值. 9) 自定义类实现Comparable接口并覆写 class CarDemo implements Comparable{ public int CompareTo(Object obj){ CarDemo c = (CarDemo)obj; int num = this.age - c.age; return num == 0?this.name.compareTo(c.name):num; } } 10) 创建构造器调用集合内的元素 Iterator i= ts.iterator(); while(i.hasNext()){ System.out.println(i.next()); }
|