我需要将对象添加到二叉搜索树,并希望写我自己的compareTo方法。我应该如何去做这件事。其实我试图实现一个自定义TreeSet。我很困惑在哪里实现比较器或可比较的并定义它。任何帮助表示赞赏使用自定义比较器将对象添加到二进制搜索树?
1
A
回答
1
你的对象必须是实现了接口可比
或使我们自己的比较:
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());
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;
}
}
);
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;
}
}
相关问题
- 1. 如何将二进制搜索树添加到二进制搜索树?
- 2. 二进制搜索比较器
- 3. C#使用比较器进行二进制搜索的对象列表
- 4. 使用二进制搜索树与自定义数据类型?
- 5. 将对象添加到二叉搜索树
- 6. 二进制搜索树内的二进制搜索树
- 7. 二进制搜索和eps比较
- 8. 二进制搜索比较数
- 9. Salesforce:如何将自定义对象添加到搜索结果
- 10. Python的最小值()为自定义类(二进制搜索树)
- 11. 使用类的二进制搜索树
- 12. Haskell - 二进制搜索树
- 13. 二进制搜索树Instantiaition
- 14. 二进制搜索树C++
- 15. 二进制搜索树toString
- 16. 二进制搜索树C++
- 17. 二进制搜索树
- 18. 二进制搜索树C++
- 19. 手动添加到二进制搜索树
- 20. 二进制搜索树,搜索方法
- 21. 二进制搜索树搜索操作
- 22. 二进制搜索树 - 搜索范围
- 23. Swift二进制搜索树搜索
- 24. 使用cpp将节点插入到二进制搜索树中
- 25. 二进制搜索树解构器
- 26. 自定义对象比较器
- 27. 二进制搜索树到字符串
- 28. 二进制搜索树,用对象遍历列表
- 29. 线性搜索或二进制搜索或二叉搜索树
- 30. 如何使用二进制搜索比较x509certificates