TreeSet的重复元素判断怎么实现 TreeSet类可以实现Comparable接口并覆写compareTo()放啊完成重复元素判断与排序。但是HashMap与Comparable接口没有任何关系,因此可以覆写Object类中的equals()与hashCode()方法实现HashSet的重复元素判断。equals()与hashCode()方法 hash码: public native int hashCode(); 对象比较:public boolean equals(Object obj);如何使用两个方法 当前对象就是指集合中的对象,就是this,目标对象就是准备新加进去的对象。 在Java中进行对象比较的操作有两步: (1)第一步要通过一个对象的唯一编码找到一个对象的信息; (2)当编码匹配之后再调用equals()方法进行内容的比较。 先比较当前对象与目标对象是否相等,相等返回true; 如果不相等再比较目标对象是不是所定义类的实例对象,如果不是返回false; 如果是最后比较两个对象中的属性。具体代码的举例:
package www. hashset;
import java. util. HashSet;
import java. util. Objects;
import java. util. Set;
class Teacher {
private String name;
private Integer age;
public Teacher ( String name, Integer age) {
this . name = name;
this . age = age;
}
public String getName ( ) {
return name;
}
public void setName ( String name)
{
this . name = name;
}
public Integer getAge ( ) {
return age;
}
public void setAge ( Integer age)
{
this . age = age;
}
@Override
public String toString ( ) {
return "Teacher{" +
"name='" + name + '\'' +
", age=" + age +
'}' ;
}
@Override
public boolean equals ( Object obj) {
if ( this == obj) {
return true ;
} else if ( ! ( obj instanceof Teacher ) ) {
return false ;
}
return this . name. equals ( ( ( Teacher) obj) . name) && this . age. equals ( ( ( Teacher) obj) . age) ;
}
@Override
public int hashCode ( ) {
return Objects. hash ( ) ;
}
}
public class HashSetTest {
public static void main ( String[ ] args) {
Set< Teacher> set = new HashSet < > ( ) ;
set. add ( new Teacher ( "alice" , 20 ) ) ;
set. add ( new Teacher ( "ls" , 19 ) ) ;
set. add ( new Teacher ( "tom" , 21 ) ) ;
set. add ( new Teacher ( "alice" , 20 ) ) ;
System. out. println ( set) ;
}
}