黑马程序员技术交流社区
标题:
关于 HashSet 的有关问题
[打印本页]
作者:
学习代码
时间:
2014-3-22 21:17
标题:
关于 HashSet 的有关问题
class Demo
{
public static void main(String[] args)
{
HashSet st = new HashSet();
st.add("javac");
st.add("javac");//想知道为什么"javac"的地址值是一样的啊 怎么 Object的方法的
st.add("javac1");
st.add("javac1");
st.add("javac2");
Iterator it = st.iterator();
while(it.hasNext())
{
sop(it.next());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
复制代码
哪位帅哥 美女帮忙给解释一下 谢谢
作者:
郝林杰
时间:
2014-3-22 22:04
st.add("javac");
st.add("javac");
当执行第一条st.add("javac");时HashSet调用它的add()方法将要添加的内容javac与st里面的内容相比较 如果st里没有javac元素,则添加成功;
当执行第二条st.add("javac");时HashSet调用它的add()方法将要添加的内容javac与st里面的内容相比较 此时因为已经有了javac元素(第一条语句执行完添加进去的),所以添加失败
所以元素javac的地址值是一样的
作者:
Sage
时间:
2014-3-22 22:51
关于HashSet:
1.底层实现:哈希表
2.确保元素唯一性(即不重复):hashCode方法和equals方法
3.元素之间的比较顺序:先通过hashCode方法比较hashCode值,如相同,不会执行equals方法而直接认为元素相同,否则,执行equals方法。
4.hashSet中的比较:一般情况下,建议重写hashCode方法和equals方法,而不是使用Object类中的,想要更深入的了解,推荐你看下这两种方法的源代码
作者:
学习代码
时间:
2014-3-22 23:31
Sage 发表于 2014-3-22 22:51
关于HashSet:
1.底层实现:哈希表
2.确保元素唯一性(即不重复):hashCode方法和equals方法
谢谢 兄弟的指教 我再看看
作者:
郭黎明
时间:
2014-3-22 23:33
HashSet保证了值的唯一性,在HashSet中封装的有hashCode( )和equals方法判断两个对象是否相同,如果相同就只会保留一个。
作者:
ς高眼光の目标
时间:
2014-3-23 05:00
你没有用hashCode方法和equals方法,你这样写,
st.add("javac");
st.add("javac");
2个“jvac“ 都会打印出来的
就好像 建立 2个 String 对象一样
当添加第一个个”javac“ 在内存中建立了 ,第二个”javac“会因为在内存中已经存在”javac“,
而不再重新建立对象,所以他们的地址值是一样的
通常使用Hashset,都用Hashcode和eqyals方法的
这是我的理解,希望帮到你
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2