二进制搜索方法数组Java

Kre*_*jko 1 java reflection binary-search comparable comparator

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

对于Loop实现:

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

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

目前尝试使用比较器:

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);
Run Code Online (Sandbox Code Playgroud)

任何有关如何使这项工作的帮助或示例将不胜感激.谢谢!

pou*_*sma 5

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

顺便说一句,getMethods的文档说:"返回的数组中的元素没有排序,也没有按任何特定的顺序排列 ".二进制搜索需要排序数据.这意味着您首先需要对数组进行排序.

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