黑马程序员技术交流社区

标题: 集合框架问题? [打印本页]

作者: 全海波    时间: 2012-9-6 17:33
标题: 集合框架问题?
问题阐述如图中所诉:

作者: 郑义    时间: 2012-9-6 17:54
本帖最后由 郑义 于 2012-9-6 17:56 编辑

|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、
         |--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
                            HashSet是如何保证元素唯一性的呢?
                            是通过元素的两个方法,hashCodeequals来完成。
                            如果元素的HashCode值相同,才会判断equals是否为true
                            如果元素的hashcode值不同,不会调用equals
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcodeequals方法。
         |--TreeSet

所以,分析你的程序代码要首先分析你的两个字符串对象的HashCode是不是相同。
根据API:
public int hashCode()返回此字符串的哈希码。String 对象的哈希码根据以下公式计算:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用 int 算法,这里 s 是字符串的第 i 个字符,n 是字符串的长度,^ 表示求幂。(空字符串的哈希值为 0。)

发现,你的两个字符串对象转换成字符数组之后,其数组中的每个元素都是相同的。
根据上边的计算公式可知,两个HashCod是相同的。所以判断两个元素为相同元素。

作者: 郑小杰    时间: 2012-9-6 17:56
技术分24分问这种问题?
作者: 全海波    时间: 2012-9-6 18:43
郑小杰 发表于 2012-9-6 17:56
技术分24分问这种问题?

不知道该问些什么了?我问比较高级的有没几个人回答我,你说我该怎么办呢?
作者: 郑小杰    时间: 2012-9-6 18:57
全海波 发表于 2012-9-6 18:43
不知道该问些什么了?我问比较高级的有没几个人回答我,你说我该怎么办呢? ...

:)哥们,你要清楚你问问题的目的是什么
作者: 全海波    时间: 2012-9-6 19:24
郑小杰 发表于 2012-9-6 18:57
哥们,你要清楚你问问题的目的是什么

本来不想这么问,但今天很无聊呀!就给一些人创造机会!嘿嘿
作者: 朱晓杰    时间: 2013-5-9 23:03
郑义 发表于 2012-9-6 17:54
|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、         |--HashSet:底层数据结构是 ...

顶一个!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2