java 枚举 数字 星期_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;

}

/**

* @param v

* the value we're looking for

* @return Wealth

*/

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上的伪代码改编而成的快速而肮脏的实现。

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

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

2020-11-19

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值