BitSet

BitSet类实现了一个按需增长的位向量,实际是由“二进制位”构成的一个Vector。每一位都是一个表示true或者false 的boolean 值。如果我们希望高效地存储这样只有两种类型的数据,就可以使用BitSet。

首先需要说明的是,BitSet并不属于集合框架,没有实现List或Map或者Set接口,BitSet更多的表示一种开关信息,对于海量不重复数据,利用索引表示数据的方式,将会大大节省空间使用。

位图

vector of bits也就是位图,由于可以用非常紧凑的格式来表示给定范围的连续数据而经常出现在各种算法设计中,这里非常紧凑的格式指的就是数组。

基本原理是,在一个特定的位置上(往往是数组下标的位置上)的值(开关),0为没有出现过,1表示出现过,也就是说使用的时候可根据某一个位置是否为0表示此数(这个位置代表的数,往往是下标)是否出现过。

为了方便大家理解,我么可以对上图的数据解释一下,上图是我截取了一个位向量的一部分,也就是下标为1000-1009 的位置。这里开关为1(值为1)代表着此处的数据出现过,也就是说

深度剖析Java集合之BitSet相关推荐

  1. arraylist转int数组_深度剖析Java集合之ArrayList

    一. ArrayList 初识 ArrayList是集合的一种实现,实现了接口List,List接口继承了Collection接口. ArrayList 是java 中最常用的集合类型,这是因为它使用 ...

  2. 深度剖析Java集合之ArrayDeque

    ArrayDeque ArrayDeque是Deque接口的一个实现,使用了可变数组,所以没有容量上的限制.同时,ArrayDeque是线程不安全的,在没有外部同步的情况下,不能再多线程环境下使用. ...

  3. 深度剖析Java数据结构之迭代器(Iterator)

    一.什么是迭代器 我们知道,JVM是用C/C++编写的.在百度百科中,迭代器是解释是迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定 ...

  4. 死磕Java集合之BitSet源码分析(JDK18)

    死磕Java集合之BitSet源码分析(JDK18) 文章目录 死磕Java集合之BitSet源码分析(JDK18) 简介 继承体系 存储结构 源码解析 属性 构造方法 set(int bitInde ...

  5. 深度剖析Java数据结构之队列(一)——双端队列(ArrayDeque)

    一.队列 队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头.队列中没有元素时,称为空队列. ...

  6. java 集合接口原理_图文剖析java集合框架—Set接口

    Map接口图补充待续 继上一节讲解了List接口的常用实现类以及源码的一些分析,这节将讲解集合中的Set接口. HashSet: 底层原理:哈希表结构存储.对集合的迭代次序不作任何保证; 允许元素nu ...

  7. 深度剖析Java数据结构之表(四)——LinkedList泛型类的实现

    在Java中,LinkedList泛型类继承了AbstractSequentialListf泛型类,实现了List.Deque.Colneable和Serializable接口,定义如下: 该类的实现 ...

  8. 深度剖析Java数据结构之表(三)——ArrayList泛型类的实现

    为了避免与类库中的ArrayList类重复,在这里,使用的类名为ArrayListDemo.在Java中,ArrayList泛型类是继承AbstractList泛型类的,并且实现了List<E& ...

  9. 深度剖析Java数据结构之表(二)——List接口

    一.List接口 在Java中,List接口的定义如下: public interface List<E> extends Collection<E> { int size() ...

  10. 深度剖析Java常量池

    Class常量池 class常量池可以理解为是Class文件中的资源仓库.Class文件中除了包含类的版本.字段.方法.接口等描述信息外,还有一项信息就是常量池(constant pool table ...

最新文章

  1. python模块下载过程出错_尝试导入已安装的python模块时收到错误
  2. opencv相机标定
  3. leetcode算法题--七进制数
  4. 详细讲解Python中继承内容之 单继承;(一)
  5. WolframAlpha 的使用
  6. php定位和天气,基于thinkphp实现依据用户ip判断地理位置并提供对应天气信息的应用...
  7. JPA实体注解与hibernate主键生成策略
  8. HTML5 Canvas中 绘制圆弧
  9. 阻尼衰减曲线用python_阻尼的反击 | 被半篇论文爆脑两次是一种什么体验
  10. python实现windows Service服务程序
  11. f分布表完整图a=0.01_第7章 分布分析
  12. qt 当前窗口句柄_QT获取窗口句柄
  13. 等级保护2.0三级通用要求测评方法
  14. cad直线和圆弧倒角不相切_数控加工中心如何使用任意角度倒角C和倒圆角R功能的编程...
  15. 关于谷哥传奇工程师Jeff Dean的笑话
  16. c语言上机调试步骤,C语言上机环境与上机调试.ppt
  17. 76、多边形一些基本操作(自相交、尖刺、保证逆时针、求交)
  18. Visual Odometry Revisited: What Should Be Learnt?(2020.2)
  19. 平安京服务器维护无法发布新内容,《阴阳师》手游3月6日维护更新公告
  20. 区块链开发者观点:来自 Carbon 的 Nick Pai

热门文章

  1. 100% 解决华硕 Armoury Crate 奥创软件安装及更新问题。解决错误码 502 等问题
  2. CBR,VBR,ABR,CQP四种编码方式。
  3. UiLanguage 语言-国家代码表
  4. 【好文推荐】java写安卓脚本
  5. usb口拒绝访问_电脑插上U盘显示无法访问 拒绝访问怎么回事
  6. 笔记本计算机bios设置,笔记本怎么进入bios设置【方法步骤】
  7. linux ps auxf,ps -aux命令详解
  8. 如何做好客户需求分析
  9. SXLib3D -- 一款高效的点云和网格交互处理平台
  10. CSS设置背景色透明字体不透明