今天在对我们企业项目里进行 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 个)想问下各位是否也有在项目中这样写的经验?
