JAVA集合学习-----Set

上一篇 / 下一篇  2013-05-13 00:04:08 / 个人分类:JAVA学习

---Set:元素是无序(存入与取出的顺序不一定一致),元素不可以重复
   ---HashSet:底层数据结构是Hash表
   ---TreeSet:可以对Set集合中的元素排序,因为每插入元素就会排序,效率不高,底层是二叉树
    方法一:保证元素唯一性的依据是compareTo方法return 0
    方法二:比较器中实现compara方法
    两种方法并存时,以比较器中的方法为准             

Set集合的功能与Collection一致

HastSet
HashSet不能存在重复元素
    --添加时首先是比较HashCode值
           假若相同就比较元素是否相同,调用equals方法
           假若不同,则不进行判断
    ---调用contains方法以及remove方法,依旧会先判断HashCode后,相同后判断equals方法
注:假若hashCode方法写错,就有可能存在相同的元素,
元素中重写hashCode方法以及equals方法
元素中的字符串也有本身的hashCode方法,重写时 
pubic int hashCode()
{
  System.out.println Strings.hashCode()+37;
}

public boolean equals(Obj ob)--此处必须是Obj复写
{
  if(!(obj instanceof A)) --比较时先判断是否是相同的类
   return fasle;
   A a=(A)obj---必须强转,因为传进来的是Obj
   return  this.name.equals(a.name) && this.age == a.age---此处equals调用的是String类写好的方法,因为一般定义为String name =xx
}

TreeSet
让元素自身具备比较性,元素的自然顺序,默认顺序
需要比较,元素需继承Comparable接口,重写compareTo方法,返回值为 int类型,正数为大,0相等,负数为小,调用方法的对象与已存在对象进行比较
TreeSet本质是二叉树,取出时从小到大
class Student implements Comparable{
public String name;
public int age;

public int compareTo(Obj ob)
{
  If(!(ob instanceof A))
 throw new RuntimeException;
  Studennt st =(Student) ob
  if(this.age>st.age)
   return 1;
   if(this.age=st.age){
   return this.name.compareTo(st.name);}
   return -1;
}
}
注:String类 已实现compateTo方法

元素不具备比较性,或者具备的比较性不是所需要的,让集合自身具备比较性
比较器实现,定义一个类,继承Comparator接口,需要覆盖compara方法,New对象时,需要将比较器对象放入,如下
TreeSet ts =new TreeSet(new Mycompare())

比较器
class Mycompare implements Comparator
{
  public int compare(obj o1,obj o2){
  Student s1=(Student) o1;
  Student s2=(Student) o2;
  int num=s1.getname().compareTo(s2.getname())
  if(num == 0){
   return new Integer(s1.getage()).compareTo (new Integer(s2.getage()));
    }
   return num;
   }
}

TAG:

 

评分:0

我来说两句

日历

« 2024-04-20  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 10016
  • 日志数: 20
  • 建立时间: 2013-03-24
  • 更新时间: 2014-03-22

RSS订阅

Open Toolbar