首页 > 解决方案 > 如何在 O(1) 中选择方法

问题描述

假设我有n方法并且我得到了一个数字i,现在我想调用方法f_i

最简单的方法是使用这样的条件:

if (j == 1) f_1();
else if (j == 2) f_2();
...
else if (j == n) f_n();

由于在最坏情况下有 n 次比较,因此最坏情况下的运行时间为 O(n)。

额外:如果函数 f_i 将参数 p[i][1] 带到 p[i][#parameters of f_i] 其中 p 是二维数组,你将如何解决这个问题?

标签: java

解决方案


只需使用一个数组,如下所示:

private static final class Functions {
    private static void f0() {
        System.out.println(0);
    }
    private static void f1() {
        System.out.println(1);
    }
    private static void f2() {
        System.out.println(2);
    }
    private static void f3() {
        System.out.println(3);
    }
}

public static void main(String[] args) throws Exception {
    int j = 2;

    Runnable[] functions = {
            Functions::f0,
            Functions::f1,
            Functions::f2,
            Functions::f3,
    };

    functions[j].run();
}

如果你的函数返回一些东西和/或接受参数,你需要一个不同的数组类型,比如Consumer, Supplier, 或Function.


推荐阅读