我正在检查 TreeSet 如何检查重复元素并具有以下代码
import java.util.*;
public class TreeDemo{
public static void main(String[] args)
{
new TreeDemo().go();
}
public void go()
{
Song s1 = new Song("song1","artist1");
Song s2 = new Song("song2","artist2");
Song s3 = new Song("song3","artist3");
Song s4 = new Song("song3","artist3");
Set<Song> tree = new TreeSet<Song>();
tree.add(s1);
tree.add(s2);
tree.add(s3);
tree.add(s4);
System.out.println(tree);
}
}
class Song implements Comparable<Song>{
private String title;
private String artist;
public Song(String t, String a)
{
title=t;
artist=a;
}
public String getTitle(){
return title;
}
public int compareTo(Song s){
//Song s = (Song)o;
return title.compareTo(s.getTitle());
}
public String toString(){
return title;
}
}
当我执行这段代码时,我得到以下输出
[song1, song2, song3]
我的问题是:-
- 即使我没有实现 hashCode 和 equals 方法(我确实实现了 Comparable 接口,因为它是强制性的并且需要保持 Set 的排序),TreeSet 如何确定重复项?
- 它使用了 Object 类的默认实现吗?看起来它使用了“标题”字段来进行此检查,因为当我添加时将其视为重复,但当我添加时它不会将其视为重复。
Thanks.
TreeSet
(或者从技术上讲,TreeMap
支持它)仅使用compareTo()
比较元素的函数。
它不使用Object
's .equals()
or .hashCode()
。此外,如果它使用了其中任何一个,你的输出将是
[song1, song2, song3, song3]
because Object
的默认实现使用内存地址来测试对象相等性,而不是其成员。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)