java - 二进制搜索方法数组Java

标签 java reflection binary-search comparator comparable

我正在尝试有效地搜索天气,子类实现了一个名为 _szMethodName 的字符串中的方法。通过执行 Method[] _arrClassMethodsList = class.getMethods();,我可以获得子类实现的所有方法的数组。然后我可以将方法的名称与我正在寻找的函数的 stringName 进行比较,以确定该类是否实现了该特定方法。目前我在 for 循环中工作,但随着子类的增长,它会变慢。

For循环实现:

for (Method method : class.getMethods()){
       if(method.getName().equals(_szMethodName)){
          //method exists in subclass
          break;
      }
}

class.getMethods() 中的方法数组按字母顺序排序。(仅在 Java >=7 中)。我希望我可以通过对数组使用二进制搜索或其他一些优化而不是使用 for 循环来利用它。但是,我还没有弄清楚如何在数组上实现Java的二分查找功能。我试过使用 comparator 或 and comparable 但还没有成功。我最近的比较器实现如下,但存在我尚未能够解决的错误。

当前尝试使用比较器:

Comparator<Method> c = new Comparator <Method>() {
    public int compare(Method method, String string) {
        return method.getName().compareTo(string);
    }
};

Method[] _arrClassMethodsList = class.getMethods();
int index = Arrays.binarySearch(_arrClassMethodsList, _szMethodName, c);

如果您能提供有关如何实现此功能的任何帮助或示例,我们将不胜感激。谢谢!

最佳答案

你为什么不使用方法 http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getMethod%28java.lang.String,%20java.lang.Class...%29直接获取方法(如果可用)并让 JVM 高效地为您完成工作?

顺便说一句,getMethods 的文档说:“返回的数组中的元素未排序并且未按任何特定顺序 em>”。二进制搜索需要排序的数据。这意味着您首先需要对数组进行排序。

注意:你应该看看那个方法 getMatchingAccessibleMethod那可能会做你所期望的。

关于java - 二进制搜索方法数组Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14982907/

相关文章:

python - 在 Python 中插入和删除排序列表

java - 对带有字符串前缀的数组进行二分搜索

Java 排列

java - (Jackson 1.9.2) 让@JsonIgnore 工作 : deserialization with mixin annotations and polymorphic types

java - 如何在java中使用我自己的密码和aes

c# - 将 SetValue 与隐式转换结合使用

java - 如何将java对象序列化为field.path = field.value

c - 二进制搜索递归无法正常运行

java - 如何在 jasper 报告中显示亚马逊 S3 图像

python - 在 Python 中动态重新加载类定义