今天在对我们企业项目里进行 CR ,其中发现有位同事在保存 id 列表时采用位运算的方式,将 int 类型的列表转成 二进制值,代码:
private int getFlag(List<Integer> flags) {
int result = 0;
if (flags == null) {
return 0;
}
for (Integer flag : flags) {
result |= 1 << flag;
}
return result;
}
在取出列表时,则:
private List<Integer> toFlagList(int flag) {
List<Integer> result = new ArrayList<>();
for (int i = 0; i < 32; i++) {
if (((flag >>> i) & 1) == 1) {
result.add(i);
}
}
return result;
}
这种写法,我个人觉得,在存储数值较多的列表时还不错,就是代码可读性不好(对于平时不怎么使用到位运算的同事),此外,这种时间换空间的方式,是否收效甚微呢?( id 列表值不多,就一个下拉框,在可预见的未来应该也不会超过 10 个)想问下各位是否也有在项目中这样写的经验?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.