Phi*_*lip 0 java string reference hashset
我有以下内容。
HashSet<String> set1 = new HashSet<String>();
HashSet<String> set2 = new HashSet<String>();
String strB1 = "B";
String strB2 = "B";
set1.add( "A" );
set1.add( strB1 );
set2.add( strB2 );
set1.removeAll( set2 );
Run Code Online (Sandbox Code Playgroud)
set1 最终会只包含“A”,还是也会包含“B”?
小智 5
HashSet使用对象相等( Object.equals),而不是身份(“引用相等”)。
此外,HashSet使用Object.hashCode了哈希函数。
不幸的是,要“了解”这一点,需要“阅读”文档并了解哈希是如何实现的。从文档中HashSet.contains:
如果此集合包含指定的元素,则返回 true。更正式地说,当且仅当此集合包含元素 e 使得 (o==null ? e==null : o.equals(e) )时才返回 true 。
更一般的Set文档说:
不包含重复元素的集合。更正式地说,集合不包含一对元素 e1 和 e2 使得e1.equals(e2),并且至多一个空元素。正如其名称所暗示的那样,该接口对数学集合抽象进行建模。
除了极少数例外,例如IdentityHashMap,Java 中的数据结构处理的是相等性而不是身份。
因此,为了回答这个问题,HashSet 处理“字符串值”。
(由于字符串实习,这个例子可能特别具有误导性,但这不会改变上面的内容,因为身份意味着相等,即使反之亦然。)
| 归档时间: |
|
| 查看次数: |
1636 次 |
| 最近记录: |