您可以使用位掩码来尝试减少循环次数。您添加了一些操作,但可能会执行一半的循环:
public static List<String> list(int val) {
List<String> dummyList = new ArrayList<String>();
int loop = 32;
// Mask the 16 MSB if all are zero only loop on the 16 LSB
if((val & 0xFFFF0000) == 0){
loop = 16;
}
int bit = 1;
int x;
for (int i = 0; i < loop; i++) {
x = bit;
if ((x & val) != 0) {
dummyList.add(String.valueOf(i + 1));
}
bit <<= 1;
}
return dummyList;
}
根据传入的数据,这可能会增加时间。
您还可以通过一次执行两个位来将循环减半:
public static List<String> list(int val) {
List<String> dummyList = new ArrayList<String>();
int bit = 3;
int x;
for (int i = 0; i < 32; i += 2) {
x = (bit & val);
switch (x) {
case 1:
dummyList.add(String.valueOf(i + 1));
break;
case 2:
dummyList.add(String.valueOf(i+2));
break;
case 3:
dummyList.add(String.valueOf(i+1));
dummyList.add(String.valueOf(i+2));
break;
default:
}
val >>= 2;
}
return dummyList;
}