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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 学习代码 中级黑马   /  2014-3-22 21:17  /  1926 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                         HashSet st = new HashSet();
  6.                         st.add("javac");
  7.                         st.add("javac");//想知道为什么"javac"的地址值是一样的啊 怎么 Object的方法的
  8.                         st.add("javac1");
  9.                         st.add("javac1");
  10.                         st.add("javac2");
  11.                         Iterator it = st.iterator();
  12.                         while(it.hasNext())
  13.                         {
  14.                                 sop(it.next());
  15.                         }
  16.         }

  17. public static void sop(Object obj)
  18.                 {
  19.                         System.out.println(obj);
  20.                 }

  21. }
复制代码

哪位帅哥 美女帮忙给解释一下  谢谢  

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

5 个回复

倒序浏览
st.add("javac");
st.add("javac");
当执行第一条st.add("javac");时HashSet调用它的add()方法将要添加的内容javac与st里面的内容相比较 如果st里没有javac元素,则添加成功;
当执行第二条st.add("javac");时HashSet调用它的add()方法将要添加的内容javac与st里面的内容相比较 此时因为已经有了javac元素(第一条语句执行完添加进去的),所以添加失败
所以元素javac的地址值是一样的

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
关于HashSet:
1.底层实现:哈希表
2.确保元素唯一性(即不重复):hashCode方法和equals方法
3.元素之间的比较顺序:先通过hashCode方法比较hashCode值,如相同,不会执行equals方法而直接认为元素相同,否则,执行equals方法。
4.hashSet中的比较:一般情况下,建议重写hashCode方法和equals方法,而不是使用Object类中的,想要更深入的了解,推荐你看下这两种方法的源代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
Sage 发表于 2014-3-22 22:51
关于HashSet:
1.底层实现:哈希表
2.确保元素唯一性(即不重复):hashCode方法和equals方法

谢谢 兄弟的指教    我再看看
回复 使用道具 举报
HashSet保证了值的唯一性,在HashSet中封装的有hashCode( )和equals方法判断两个对象是否相同,如果相同就只会保留一个。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
你没有用hashCode方法和equals方法,你这样写,
st.add("javac");
st.add("javac");
2个“jvac“ 都会打印出来的
就好像 建立 2个 String 对象一样
当添加第一个个”javac“ 在内存中建立了 ,第二个”javac“会因为在内存中已经存在”javac“,
而不再重新建立对象,所以他们的地址值是一样的
通常使用Hashset,都用Hashcode和eqyals方法的
这是我的理解,希望帮到你

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

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