我需要在Binary搜索树中添加对象,并且想要编写自己的compareTo方法。我应该怎么做呢。实际上我正在尝试实现自定义TreeSet。我很困惑在哪里实施比较器或类似的比较并定义它。任何帮助表示赞赏
答案 0 :(得分:1)
您希望确保添加到TreeSet
的对象实现Comparable
。这意味着确保存储的对象实现Javadoc中定义的compareTo
方法。
您可能不需要Comparator
。
顺便说一句,我们最近在这个主题上创建了一个tutorial。希望它可以帮助你。
答案 1 :(得分:1)
对于TreeSet
,您需要自己实现Comparator
接口。
这样的事,也许?
// Using an anonymous interface
Set<Foobar> example = new TreeSet<Foobar>(new Comparator<Foobar>() {
@Override
public int compare(Foobar f1, Foobar f2) {
// How will you compare f1 and f2??
return 0;
}
@Override
public boolean equals(Object obj) {
// How will you determine if objects are equal?
return false;
}
}
);
答案 2 :(得分:1)
请参阅以下代码
package com.example.treeset;
import java.util.Comparator;
import java.util.TreeSet;
public class MyCompUser {
public static void main(String a[]){
//By using name comparator (String comparison)
TreeSet<Empl> nameComp = new TreeSet<Empl>(new MyNameComp());
nameComp.add(new Empl("Ram",3000));
nameComp.add(new Empl("John",6000));
nameComp.add(new Empl("Crish",2000));
nameComp.add(new Empl("Tom",2400));
for(Empl e:nameComp){
System.out.println(e);
}
System.out.println("===========================");
//By using salary comparator (int comparison)
TreeSet<Empl> salComp = new TreeSet<Empl>(new MySalaryComp());
salComp.add(new Empl("Ram",3000));
salComp.add(new Empl("John",6000));
salComp.add(new Empl("Crish",2000));
salComp.add(new Empl("Tom",2400));
for(Empl e:salComp){
System.out.println(e);
}
}
}
class MyNameComp implements Comparator<Empl>{
@Override
public int compare(Empl e1, Empl e2) {
return e1.getName().compareTo(e2.getName());
}
}
class MySalaryComp implements Comparator<Empl>{
@Override
public int compare(Empl e1, Empl e2) {
if(e1.getSalary() > e2.getSalary()){
return 1;
} else {
return -1;
}
}
}
class Empl{
private String name;
private int salary;
public Empl(String n, int s){
this.name = n;
this.salary = s;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public String toString(){
return "Name: "+this.name+"-- Salary: "+this.salary;
}
}
答案 3 :(得分:1)
您的对象必须是implements interface Comparable
class MyClass implements Comparable {
int compareTo(){...}
}
final Set set = new TreeSet();
set.add(new MyClass());
....
set.add(new MyClass());
或制作我们自己的比较器:
class MyClass {}
class MyComparator implements Comparator {
int compareTo(Object o1, Object o2){
...
}
}
final Set set = new TreeSet(new MyComparator());
set.add(new MyClass());
....
set.add(new MyClass());