我想优化数据库行应用程序设置。像这样
10 - enabled option 1;
12 - enabled option 2;
13 - enabled option 3;
整个数字作为1073741823存储在数据库中。
我试图实现这一点:
public void test(){
// Let's say you get a String representing your option from your database
String optionFromDB= "132456";
// optionFromDB is a number like "132456"
// We transform it to bigDecimal:
BigDecimal myOptions=new BigDecimal(optionFromDB);
// Then we can use it.
// enable the option X (X is a number)
myOptions.setBit(2);
// Disable option X
myOptions.clearBit(2);
// Save the options to the db:
String newValToSave=myOptions.toString();
// do something if option x enable:
if (myOptions.testBit(123)){
System.out.println("test");
}
}
我该如何正确实施?
答案 0 :(得分:1)
好吧,只使用一个数字,我们称它为 state 。类型应根据您将拥有的选项数量来确定。例如,如果您有10个选项,则Integer
绰绰有余。对于每个选项,您可以使用此整数状态的一位。
因此要设置第一个选项,只需设置第一个位,通常将第一个选项的第i个位设置。要查看是否启用了ith选项,请检查 state 的ith位是否已设置。
要设置第i位,可以使用以下代码:
state |= 1 << i;
要测试第i位,请执行以下操作:
state & (1L << i)) != 0;
要清除第i位,请使用:
state &= ~(1 << i);
答案 1 :(得分:1)
假设值是整数-这将为您提供32个选项。如果那还不够,您可以花很长时间(64位)或将相同的逻辑应用于任意数量的位。