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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 全海波 中级黑马   /  2012-9-6 17:33  /  2192 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题阐述如图中所诉:

6 个回复

正序浏览
郑义 发表于 2012-9-6 17:54
|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、         |--HashSet:底层数据结构是 ...

顶一个!
回复 使用道具 举报
郑小杰 发表于 2012-9-6 18:57
哥们,你要清楚你问问题的目的是什么

本来不想这么问,但今天很无聊呀!就给一些人创造机会!嘿嘿
回复 使用道具 举报
全海波 发表于 2012-9-6 18:43
不知道该问些什么了?我问比较高级的有没几个人回答我,你说我该怎么办呢? ...

:)哥们,你要清楚你问问题的目的是什么
回复 使用道具 举报
郑小杰 发表于 2012-9-6 17:56
技术分24分问这种问题?

不知道该问些什么了?我问比较高级的有没几个人回答我,你说我该怎么办呢?
回复 使用道具 举报
技术分24分问这种问题?
回复 使用道具 举报
本帖最后由 郑义 于 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是相同的。所以判断两个元素为相同元素。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马