当我尝试将两个具有相同值的字符串添加到treeSet时,为什么只添加了一个对象?

时间:2015-12-17 14:51:47

标签: java collections

当我尝试将两个具有相同值的字符串添加到treeSet时,为什么只添加了一个对象?

 TreeSet ts = new TreeSet();
 ts.add(new String("abc"));
 ts.add(new String("abc"));

是否与对象引用或状态进行比较?

2 个答案:

答案 0 :(得分:1)

查看the docs for TreeSet's add method

  

如果指定的元素尚不存在,则将其添加到此集合中。更正式地,如果集合不包含元素e2,则将指定的元素e添加到该集合中(e == null?e2 == null:e.equals(e2))。如果此set已包含该元素,则调用将保持set不变并返回false。

所以它使用值相等,而不是引用相等。这需要遵守Setin its documentation

的承诺
  

不包含重复元素的集合。更正式地说,集合不包含元素对e1和e2,使得e1.equals(e2)和至多一个null元素。正如其名称所暗示的,该界面模拟数学集抽象。

答案 1 :(得分:0)

这就是“设置”的工作原理。string objects具有相同的值,因此,set只会考虑一次。set中的内容取决于实际值(内容)。

相关问题