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上的伪代码改编而成的快速而肮脏的实现。
如果您的值少于(例如)一打,那么线性搜索可能仍然比二进制搜索更有效(并且代码肯定更自解释)。只有当您拥有数十个或数百个值并且执行数百万次查找时,二进制搜索才真正奏效。
给定您的原始值,这是邪恶的,过早的优化。我只是想将其作为那些使用大量价值观的人的一种选择。



