A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 山水游客 中级黑马   /  2012-5-25 16:38  /  1461 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Set里的元素是不能重复的,那么用什么方法来区分重复

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 加油伙计·

查看全部评分

3 个回复

倒序浏览
本帖最后由 张晨 于 2012-5-25 16:49 编辑

TreeSet
1、自定义类实现comparable接口,是自定义类实现比较功能
2、使用一个独立的实现comparator接口的类,来比较自定义类,这种方式比较灵活,所以比上面一种更常用
如果类中即实现了comparable接口又传入了comparator比较器,则比较器优先
HashSet
自定义类需要覆写,hashcode()和equals()方法,jvm先判断hashcode()是否一致,如果一直在判断equals(),如果也一致说明是同一个元素,反之则不是

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
TreeMap
java中String 、Integer....等类型都复写了compareTo()函数,跟据compareTo()函数的返回值来确定两个对象是否相等,如果返回的值为0,那么两个比较的对象就相等,如果返回值不为0那么不相等。
如果要比较自定义的对象是否相等,同样要复写这个函数,要不然没法比较。比如:
class person()
{
   private String name;
  private int age;
.......
   public int compareTo(person p)
    {
        int num = new Integer(this.age).compareTo(new Integer(p.age));   //判断年龄是否相等
           if(num==0)                                                                                  //年龄相等的话再比较名字
             {
              return   this.name.compareTo(p.name);                                   //如果名字也相等的话那么两个对象就相等了
            }
          return num;
    }
}
hashMap的原理差不多,只是比较的函数不同罢了,复写hashCode()与equals(Object obj)。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
HashSet在存储元素的时候, 先调用对象的hashCode方法, 计算一个哈希值, 然后在集合中查找是否有哈希值相同的对象,  如果没有哈希值相同的对象,直接存入
如果有哈希值相同的对象, 则和哈希值相同的对象进行equals比较 , equals比较结果为false就存入,equals比较结果为true则不存,如果我们想在HashSet中存储自
定义对象, 并且去重复, 那么这个自定义的类必须重写hashCodeequals方法.
   在向TreeSet中存储元素的时候, TreeSet会使用指定的比较算法对存储元素进行排序, 内部以二叉树形式进行存储.      指定比较算法的方式:                                      
自然顺序: 在类上实现Comparable接口, 重写compareTo方法, 在方法中定义比较算法.                    
比较器顺序: 定义类实现Comparator接口, 重写compare方法, 创建比较器对象, 传入TreeSet构造函数.
如果我们想在TreeSet中存储自定义对象, 并且排序, 要么这个自定义的类实现Comparable接口, 要么在TreeSet中传入Comparator.                        
                                    
                                    
                           
                     
                           

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马