Com*_*met 5 java bit-manipulation
我编写了这段代码来检查Java中Integer(如果用二进制表示)的哪些位是打开的:
public static List<String> list(int val)
{
List<String> dummyList = new ArrayList<String>();
int bit = 1;
int x;
for(int i=0; i<32; i++)
{
x = bit;
if((x&val)!=0)
dummyList.add(String.valueOf(i+1));
bit = bit << 1;
}
return dummyList;
}
Run Code Online (Sandbox Code Playgroud)
上面编写的代码工作正常.但是它有一个运行32次的循环(在Java整数中是32位长).我想尽量减少这种复杂性.请分享更好的解决方案.提前致谢.
复杂度为 O(1),因此没有太多需要“最小化”的地方。
你的代码没问题..这里稍微重构了一下。
public static List<String> list(int val) {
List<String> dummyList = new ArrayList<String>();
for (int i = 0; i < 32; i++)
if ((1 << i & val) != 0)
dummyList.add("" + (i+1));
return dummyList;
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你有没有考虑过使用BitSet?
| 归档时间: |
|
| 查看次数: |
1532 次 |
| 最近记录: |