Я видел проблему, заданную здесь раньше, но с тех пор мне не помогала, поэтому я снова спрашиваю ее с моей подлинной проблемой.java.util.TreeSet не соответствует договору о продлении контракта?
Я хочу удалить дублированный объект на основе всех свойств объекта (здесь Name, id, CompanyName, Address
). Вот мой код:
package CollectionDemo;
import java.util.TreeSet;
class Employee implements Comparable<Employee> {
String Name;
int id;
String CompanyName;
String Address;
public Employee(String Name,int id,String CompanyName,String Address) {
this.Name = Name;
this.id = id;
this.CompanyName = CompanyName;
this.Address = Address;
}
@Override
public String toString() {
return "Name : "+this.Name+"\tID : "+this.id+"\tCompanyName : "+this.CompanyName+"\tAddress : "+this.Address;
}
@Override
public int compareTo(Employee obj){
if((this.Name.equals(obj.Name))&&(this.id==obj.id)&&(this.CompanyName.equals(obj.CompanyName))&&(this.Address.equals(obj.Address))) {
return 0;
}
return 1;
}
}
public class DemoTreeset {
public static void main(String[] args) {
TreeSet<Employee> ts = new TreeSet<>();
ts.add(new Employee("Panda", 11, "Google", "California"));
ts.add(new Employee("Panda", 12, "Google", "California"));
ts.add(new Employee("Panda", 11, "Google", "California"));
ts.add(new Employee("Panda", 13, "Google", "California"));
ts.add(new Employee("Panda", 11, "Google", "California"));
ts.add(new Employee("Panda", 11, "Infosys", "India"));
ts.add(new Employee("Panda", 11, "Google", "California"));
ts.add(new Employee("Panda", 11, "Infosys", "India"));
ts.add(new Employee("Panda", 12, "Google", "California"));
ts.add(new Employee("Panda", 11, "Google", "California"));
ts.add(new Employee("Panda", 13, "Google", "California"));
ts.add(new Employee("Panda", 11, "Google", "California"));
ts.add(new Employee("Panda", 11, "Infosys", "India"));
ts.add(new Employee("Panda", 11, "Google", "California"));
ts.add(new Employee("Panda", 11, "Infosys", "India"));
for(Employee e : ts) {
System.out.println(e);
}
}
}
ВЫВОД:
Name : Panda ID : 11 CompanyName : Google Address : California
Name : Panda ID : 12 CompanyName : Google Address : California
Name : Panda ID : 13 CompanyName : Google Address : California
Name : Panda ID : 11 CompanyName : Google Address : California
Name : Panda ID : 11 CompanyName : Infosys Address : India
Name : Panda ID : 13 CompanyName : Google Address : California
Я знаю TreeSet
использует compareTo()
вместо equals()
сравнивать объекты, так что я переопределить его, но как вы можете видеть результат, удалены некоторые дубликаты, но не все из них. Я не понимаю, почему я получаю этот результат. Почему он не удаляет все дубликаты, а лишь немногие из них?
Как можно что-либо (не говоря уже о 'TreeSet') использовать' equals() 'для _компьютера objects_? –
@KedarMhaswade Я сказал TreeSet Использует compareTo() вместо equals() для сравнения объектов ... –
Короткий ответ: ваша реализация 'compareTo' _massively_ нарушает контракт для этого метода, а' TreeSet' не может помочь вам когда вы даете ему бессмысленные реализации. –