前言:
现在手游一般都有类似于任务,成就的系统。我们假设成就有很多很多条, 那服务器和客户端之间同步状态的流量会比较大。 有什么好的办法能减少流量消耗呢,我们可以使用BitMap。
正文
BitMap
- 定义:用一个bit位来标记某个元素对应的Value, 而Key即是该元素。
- 优点:
- 运算效率高(不需进行比较和移位)
- 占用内存少(0和1都是油意义的)
- 缺点:
- 所有的数据不能重复。
- 用途:可进行数据的快速查找,判重,删除
- 适用范围:一般来说数据范围是int的10倍以下
对于成就系统来说,成就是有自己的id,所以肯定不会重复。
实现思路:
- 总数为N, 所需内存空间:int [1 + N/32]
- 存入时:
- 十进制数0-N对应的在数组a中的下标:index_loc = N / 32
- i >> 5 等价 i / 32
- 求十进制数0-N对应的bit位: bit_loc = N % 32
- n & 31 等价 n % 32
代码实现:
class BitMap
{
const