zoukankan      html  css  js  c++  java
  • Java BitSet使用场景和示例

    一、什么是BitSet?

      注:以下内容来自JDK API:

      BitSet类实现了一个按需增长的位向量。位Set的每一个组件都有一个boolean值。用非负的整数将BitSet的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个 BitSet修改另一个 BitSet的内容。 

      默认情况下,set 中所有位的初始值都是false。 

      每个位 set 都有一个当前大小,也就是该位 set 当前所用空间的位数。注意,这个大小与位 set 的实现有关,所以它可能随实现的不同而更改。位 set 的长度与位 set 的逻辑长度有关,并且是与实现无关而定义的。 

    二、使用场景

       常见的应用场景是对海量数据进行一些统计工作,比如日志分析、用户数统计等。

      之前在阿里的实习面试就被问到一道题:有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来?

      代码示例如下: 

    public class Alibaba
    {
        public static void main(String[] args)
        {
            Random random=new Random();
            
            List<Integer> list=new ArrayList<>();
            for(int i=0;i<10000000;i++)
            {
                int randomResult=random.nextInt(100000000);
                list.add(randomResult);
            }
            System.out.println("产生的随机数有");
            for(int i=0;i<list.size();i++)
            {
                System.out.println(list.get(i));
            }
            BitSet bitSet=new BitSet(100000000);
            for(int i=0;i<10000000;i++)
            {
                bitSet.set(list.get(i));
            }
            
            System.out.println("0~1亿不在上述随机数中有"+bitSet.size());
            for (int i = 0; i < 100000000; i++)
            {
                if(!bitSet.get(i))
                {
                    System.out.println(i);
                }
            }     
        }
    }
    应对软件变化
  • 相关阅读:
    java 代码 添加控件 修改位置 View
    获取整个Activity的layout
    线程加锁 同步
    应用内悬浮按钮 可吸附 展开有动画 mini播放器
    svg 动画
    动画之二:属性动画 Property Animation
    ButterKnife 免去findviewby的麻烦
    ImageView 控件的宽高随图片变化
    python pip使用国内镜像安装第三方库:命令行或PyCharm
    pycharm安装pika提示CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com>
  • 原文地址:https://www.cnblogs.com/windpoplar/p/10596830.html
Copyright © 2011-2022 走看看