博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的位向量——BitSet
阅读量:2197 次
发布时间:2019-05-02

本文共 2337 字,大约阅读时间需要 7 分钟。

简介

BitSet是一个在java.util包下的工具类,在JDK 1.0就已经存在了。但是比起位向量,我觉得BitSet更加适合作为位图(BitMap)索引。

示例

前文提到过BitSet可以用来做位图索引,下面我将用一个例子向大家展示怎么使用BitSet

假设存在以下业务场景,给两批人数相同的人分配序号,请实现以下功能:

  1. 找出两批人中,男性和女性的人数
  2. 序号相同,且性别不同进行婚姻匹配

实体

/** * @author RJH * create at 2018/11/28 */public class Person {    /**     * 主键     */    private long id;    /**     * 性别,true为男性,false为女性     */    private boolean sex;        ...省略getter/setter方法...        @Override    public String toString() {        return "Person{" +                "id=" + id +                ", sex=" + (sex?"男":"女")+                '}';    }}

使用BitSet

/** * BitSet示例 * @author RJH * create at 2018/11/28 */public class BitSetDemo {    /**     * 随机生成数据     * @param num     * @return     */    public static List
generatePeople(int num){ List
people=new ArrayList<>(); Random random=new Random(); for(int i=0;i<10;i++){ Person p=new Person(); if(random.nextInt(5)%2==0){ p.setSex(true); } people.add(p); } return people; } /** * 生成位图索引 * @param people * @return */ public static BitSet getBitSet(List
people){ BitSet bitSet=new BitSet(); for(int i=0;i
people1=generatePeople(10); List
people2=generatePeople(10); System.out.println("第一批人:"+people1); System.out.println("第二批人:"+people2); BitSet bitSet1=getBitSet(people1); BitSet bitSet2=getBitSet(people2); System.out.println("第一批人中男性个数:"+bitSet1.cardinality()+",女性个数:"+(10-bitSet1.cardinality())); System.out.println("第二批人中男性个数:"+bitSet2.cardinality()+",女性个数:"+(10-bitSet2.cardinality())); //使用异或(xor)找出序号相同性别不同的人 bitSet1.xor(bitSet2); System.out.println("婚配人数:"+bitSet1.cardinality()); }}

运行结果

第一批人:[Person{id=0, sex=女}, Person{id=0, sex=男}, Person{id=0, sex=女}, Person{id=0, sex=男}, Person{id=0, sex=男}, Person{id=0, sex=男}, Person{id=0, sex=男}, Person{id=0, sex=男}, Person{id=0, sex=男}, Person{id=0, sex=女}]第二批人:[Person{id=0, sex=男}, Person{id=0, sex=男}, Person{id=0, sex=女}, Person{id=0, sex=男}, Person{id=0, sex=男}, Person{id=0, sex=男}, Person{id=0, sex=女}, Person{id=0, sex=男}, Person{id=0, sex=男}, Person{id=0, sex=男}]第一批人中男性个数:7,女性个数:3第二批人中男性个数:8,女性个数:2婚配人数:3

转载地址:http://sroub.baihongyu.com/

你可能感兴趣的文章
GAN 的 keras 实现
查看>>
AI 在 marketing 上的应用
查看>>
Logistic regression 为什么用 sigmoid ?
查看>>
Logistic Regression 为什么用极大似然函数
查看>>
SVM 的核函数选择和调参
查看>>
LightGBM 如何调参
查看>>
用 TensorFlow.js 在浏览器中训练神经网络
查看>>
cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset
查看>>
梯度消失问题与如何选择激活函数
查看>>
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>
什么是 Q-learning
查看>>
用一个小游戏入门深度强化学习
查看>>
5 分钟入门 Google 最强NLP模型:BERT
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>