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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王德升 中级黑马   /  2012-7-15 19:38  /  1204 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

第一。

import java.util.*;

public class BasicContainer {
    public static void main(String[] args) {
        Collection c = new HashSet();
        c.add("hello");
        c.add(new Name("f1","l1"));
        c.add(new Integer(100));
        c.remove("hello");
        c.remove(new Integer(100));
        System.out.println
                  (c.remove(new Name("f1","l1")));
        System.out.println(c);
    }


}

class Name implements Comparable {
    private String firstName,lastName;
    public Name(String firstName, String lastName) {
        this.firstName = firstName; this.lastName = lastName;
    }
    public String getFirstName() {  return firstName;   }
    public String getLastName() {   return lastName;   }
    public String toString() {  return firstName + " " + lastName;  }
   
    public boolean equals(Object obj) {
            if (obj instanceof Name) {
                Name name = (Name) obj;
                return (firstName.equals(name.firstName))//老毕在这里写的是this.firstName.... 和this.lastName,this是可以省略的,可是2个一对比我
                                                        //我就看不懂了,麻烦大神给我讲讲调用的过程。
                    && (lastName.equals(name.lastName));
            }
            return super.equals(obj);//这里讲解的老师说Object的equals方法就是==,我不大懂,这里返回的是父类的equals方法是怎么去实现的不要返回false?
                }
                public int hashCode() {
                    return firstName.hashCode();//这里为什么只判断了firstName为什么没有判断lastName?
                }
               
               
               
                public int compareTo(Object o) {
        Name n = (Name)o;
        int lastCmp =
            lastName.compareTo(n.lastName);
        return
             (lastCmp!=0 ? lastCmp :
              firstName.compareTo(n.firstName));
    }
               
}

第二。

equals方法和hashCode老毕说是先判断hashCode再判断equals,但是我今天看到的是先判断hashCode然后再判断equals,当时我就蒙了,
谁知道这到底是怎么样的? 还有就是说hashCode什么时候会使用?就是当对象被当做某个键当做索引的时候才会被用到?怎么理解呢???

评分

参与人数 1技术分 +1 收起 理由
刘笑 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
帅哥你仔细看看你第二个问题的第一行。。。。。我 、、、

先判断hashcode   如果比较完hashcode值是一样的话,就说明是同一个对象,便不在添加
如果比较完hashcode值不一样的话,就会去调用equals方法,   


hashcodehe equals  都是系统自动去调用的但是先调用hashcode然后才是equals   如果你没有覆写Object的hashcode和equals的话,默认调用的是Object的这两个方法
回复 使用道具 举报
说实话 我都看不懂你到底想问什么,你到底想知道什么?
回复 使用道具 举报
楼主,你的帖子太长了太纠结了,能不能长话短说啊。。。。。
回复 使用道具 举报
1,集合中HashMap的比较比较特别的,当你代码敲完作比较时,系统会动比较他们的哈希值,然后是equals()方法。不论程序中写的顺序。
2,根据你自己需要可以自定义hash()和equals()方法,运行时比较就会按你自己的方式比较了。
3,当你自定义主比较firstName的时候firstName就成了主要条件,只有主要条件相同时加入判断语句,再才会定义副比较条件的。
4,你查看JDK_API说明时,看Object类,它自己有自己的equals()方法书写,你要做的就是去复写他。Object的equals方法就是==,这本身没什么值得理解的点,记着就好了。
回复 使用道具 举报
王飞 发表于 2012-7-15 19:57
帅哥你仔细看看你第二个问题的第一行。。。。。我 、、、

先判断hashcode   如果比较完hashcode值是一样的 ...

NONO我在其他视频中别的老师这么说的。
回复 使用道具 举报
101259@qq.com 发表于 2012-7-15 22:36
楼主,你的帖子太长了太纠结了,能不能长话短说啊。。。。。

你慢慢来吧,我看了几个月被你这么容易看清那我还提什么问呢。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马