本帖最后由 郑义 于 2012-9-6 17:56 编辑
|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、 |--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。 HashSet是如何保证元素唯一性的呢? 是通过元素的两个方法,hashCode和equals来完成。 如果元素的HashCode值相同,才会判断equals是否为true。 如果元素的hashcode值不同,不会调用equals。 注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。 |--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是相同的。所以判断两个元素为相同元素。 |