使用与操作存储数据

背景

最近在更新实验室的Android项目,想到之前负责老师曾经给我们介绍过,使用“与”操作的数据存储方式。后来组长把这个方法用于项目中标签的存储管理,但是我一直没有搞清楚这其中的原理。直到最近,我开始负责更改相关部分的内容,我询问了一下相关的原理,才搞清除到底怎么回事。

原理

初级做法
比如,我们现在有的32个标签,项目中的每个对象可以附有多个标签,那么怎么表示该对象具有多个标签呢?按照我菜鸡的传统思考方式,那可能就要在用Adapter加载完标签列表之后,在点击事件发生时,再根据点击位置和那32个标签被分配到的int值或者String等类型的值来逐一判断,这样未免有些麻烦,而且值设置得不好很容易就造成给标签分配的值占用的存储空间很大。

使用与操作
不要忘了数字到了计算机中的计算都是以为2进制进行的,就是因为2进制简单,我们也可以优势地利用起计算机这一优点。对于这32个标签,我们以int类型的数字长度为基准(int类型长度为32位),使用Integer.SIZE,这32位每一位表示一种属性。如果对象是衣服,属性是颜色,我们可以用001表示蓝色,用010表示红色,用100表示黄色。如果该衣服上既有蓝色也有红色,则它的颜色属性可以表示为011(001+010)。看到这里,你或许想大叫:“这是加法啊,与运算呢?”
那么重点来了,上面是属性的存储方式,当判断该对象有几个属性的时候,使用与运算的性质,同一个位上,与运算,数值相同结果为1,不同结果为0。比如按照以上的存储方式我判断一下这件衣服上的颜色是不是有蓝色,就用001与之前计算的011相与,结果为001(二者最后一位相同,值为1),结果不为0,就说明衣服上存储的有蓝色;用010与011相与,一样的道理,结果为010不为0,说明衣服上存储的有红色;用100与011相与,结果为0,就说明衣服上没有黄色。
那么这种方式下做属性的存储判断,通过循环用既存的属性与该对象的属性值一个个相与即可。如果结果不为0则存在该属性,否则无该属性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值