java - 如何在 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 是二维数组,你将如何解决这个问题?
解决方案
只需使用一个数组,如下所示:
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
.
推荐阅读
- json - 使用json查询ansible从json中提取多个值
- react-native - 如何模拟反应原生 3rd 方模块“rn-sliding-up-panel”
- intellij-idea - 无法使用 IntelliJ 插件将 Fortify 结果上传到 SSC 服务器
- header - Varnish 6.3 版 vcl 测试失败,自定义 http 标头以数字开头
- java - 使用没有返回类型的 javax.ws.rs api 执行查询
- mysql - MySQL:在强制使用“CREATE OR REPLACE VIEW”或“ALTER VIEW”时编辑视图?
- sql-server - 更新点而不是 nvarchar(255) 列中的逗号,其中有数字
- javascript - FontAwesome Kit 加载所有版本
- google-api - 验证应用时,Google oauth 屏幕上出现“此应用未验证”警告
- android - 从存储访问框架获取文件(pdf)对象以上传到服务器