Java中使用Comparator对AVLNode对象排序遇compareTo报错问题
解决AVLNode排序时的compareTo方法报错问题
嘿,我来帮你搞定这个Cannot resolve method compareTo的报错问题,大概率是这几个原因导致的,咱们一个个排查:
可能的原因及解决方案
1. AVLNode的key属性没有公开访问权限
如果你的AVLNode类里的key是private修饰的,那在外部的Comparator里直接写node.key是访问不到的——IDE找不到这个属性,自然也就没法调用它的compareTo方法。
解决办法是给AVLNode加一个公共的getter方法来获取key:
class AVLNode { private String key; // 其他AVL树所需的属性(比如height、left子节点等) // 构造方法 public AVLNode(String key) { this.key = key; } // 新增getKey方法 public String getKey() { return this.key; } }
然后在Comparator里通过getter方法拿到key再调用compareTo:
Comparator<AVLNode> myComp2 = new Comparator<AVLNode>() { @Override public int compare(AVLNode o1, AVLNode o2) { return o1.getKey().compareTo(o2.getKey()); } };
2. 代码里的类名拼写错误
你贴的代码里出现了AVLN...,看起来是AVLNode的拼写漏了字母,这种拼写错误会让IDE识别不了正确的类,自然找不到对应的属性和方法。检查一下Comparator的泛型、方法参数里的类名是不是都写对了AVLNode,别少打字母。
3. 确认key确实是String类型
虽然你说key是String类型,但还是要再确认下AVLNode里的key有没有被误声明成其他类型(比如Object)。如果是Object类型,那它本身没有compareTo方法,就会报错。这时候把key的类型明确改成String就好。
完整可运行示例代码
import java.util.Comparator; import java.util.ArrayList; import java.util.Collections; class AVLNode { private String key; private int height; private AVLNode left, right; public AVLNode(String key) { this.key = key; this.height = 1; } public String getKey() { return key; } } public class AVLTreeTest { public static void main(String[] args){ // 实例化正确的Comparator Comparator<AVLNode> myComp2 = new Comparator<AVLNode>() { @Override public int compare(AVLNode o1, AVLNode o2) { return o1.getKey().compareTo(o2.getKey()); } }; // 测试排序 ArrayList<AVLNode> nodes = new ArrayList<>(); nodes.add(new AVLNode("banana")); nodes.add(new AVLNode("apple")); nodes.add(new AVLNode("cherry")); Collections.sort(nodes, myComp2); // 输出排序后的key:apple、banana、cherry for (AVLNode node : nodes) { System.out.println(node.getKey()); } } }
内容的提问来源于stack exchange,提问作者Zin Yosrim
相关产品推荐
相关产品推荐

