栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java枚举按数字范围搜索

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java枚举按数字范围搜索

enum
如其他建议的那样,将with与值一起使用。

然后,提供一种静态

lookup(int)
方法,该方法通过对所有值的有序列表/数组执行二进制搜索,而不是对枚举值执行强力迭代搜索。

要执行搜索,请从中间值或中间值作为“根”开始,然后将我们正在寻找的值与该值进行比较。

如果我们正在寻找的值就是那个值,那么我们就完成了。如果小于此值,那么我们将从中间值开始搜索值的下半部分。如果更大,则将其与该值之后的值进行比较,以查看其是否在范围内。如果仍然更大,则在上半部分搜索,依此类推。


编辑:按要求编写代码示例。

public enum Wealth {    BROKE(0),    DESTITUTE(10),    POOR(100),    MIDDLE_CLASS(10000),    RICH(100000),    MILLIonAIRE(1000000),    BILLIonAIRE(1000000000);    private final int value;    private Wealth(final int value) {        this.value = value;    }    public final int getValue() {        return value;    }        public static Wealth lookup(final int v) {        final Wealth[] a = Wealth.values();        int min = 0;        int max = a.length  - 1;        int i;        do { i = (min + max) / 2; final int av = a[i].value; if (v < av) {     max = i; } else if (v > av) {     if (i + 1 < a.length && v < a[i + 1].value) {         break;     }     min = i + 1; }        } while (v != a[i].value && min < max);        if (min == max) { return a[max];        }        return a[i];    }}

几点注意事项:

假定的值

Wealth
已经排序。否则,快速排序(pun!)应该可以解决问题。

这可能不是最有效的实现,只是从Wikipedia上的伪代码改编而成的快速而肮脏的实现。

如果您的值少于(例如)一打,那么线性搜索可能仍然比二进制搜索更有效(并且代码肯定更自解释)。只有当您拥有数十个或数百个值并且执行数百万次查找时,二进制搜索才真正奏效。

给定您的原始值,这是邪恶的,过早的优化。我只是想将其作为那些使用大量价值观的人的一种选择。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509688.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号