java获取10位随机数_Java基础:JAVA中BitSet使用详解

适用场景:整数,无重复;

6bf41c2391ce026dbcbfe473a7e64d97.png

Bitset 基础

Bitset,也就是位图,由于可以用非常紧凑的格式来表示给定范围的连续数据而经常出现在各种算法设计中。上面的图来自c++库中bitset的一张图。

基本原理是,用1位来表示一个数据是否出现过,0为没有出现过,1表示出现过。使用用的时候既可根据某一个是否为0表示此数是否出现过。

一个1G的空间,有 8102410241024=8.5810^9bit,也就是可以表示85亿个不同的数。

常见的应用是那些需要对海量数据进行一些统计工作的时候,比如日志分析等。

面试题中也常出现,比如:统计40亿个数据中没有出现的数据,将40亿个不同数据进行排序等。

又如:现在有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来(百度)。

programming pearls上也有一个关于使用bitset来查找电话号码的题目。

Bitmap的常见扩展,是用2位或者更多为来表示此数字的更多信息,比如出现了多少次等。

Java中Bitset的实现

Bitset这种结构虽然简单,实现的时候也有一些细节需要主要。其中的关键是一些位操作,比如如何将指定位进行反转、设置、查询指定位的状态(0或者1)等。 本文,分析一下java中bitset的实现,抛砖引玉,希望给那些需要自己设计位图结构的需要的程序员有所启发。

Bitmap的基本操作有:

  • 初始化一个bitset,指定大小。
  • 清空bitset。
  • 反转某一指定位。
  • 设置某一指定位。
  • 获取某一位的状态。
  • 当前bitset的bit总位数。

使用场景

常见的应用是那些需要对海量数据进行一些统计工作的时候,比如日志分析、用户数统计等等

如统计40亿个数据中没有出现的数据,将40亿个不同数据进行排序等。

现在有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来

代码示例

package util; import java.util.Arrays;import java.util.BitSet; public class BitSetDemo { /** * 求一个字符串包含的char *  */public static void containChars(String str) {BitSet used = new BitSet();for (int i = 0; i < str.length(); i++)used.set(str.charAt(i)); // set bit for char StringBuilder sb = new StringBuilder();sb.append("[");int size = used.size();System.out.println(size);for (int i = 0; i < size; i++) {if (used.get(i)) {sb.append((char) i);}}sb.append("]");System.out.println(sb.toString());} /** * 求素数 有无限个。一个大于1的自然数,如果除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为素数(质数) 否则称为合数 */public static void computePrime() {BitSet sieve = new BitSet(1024);int size = sieve.size();for (int i = 2; i < size; i++)sieve.set(i);int finalBit = (int) Math.sqrt(sieve.size()); for (int i = 2; i < finalBit; i++)if (sieve.get(i))for (int j = 2 * i; j < size; j += i)sieve.clear(j); int counter = 0;for (int i = 1; i < size; i++) {if (sieve.get(i)) {System.out.printf("%5d

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用shiro框架,注销问题的解决

在使用shiro框架的时候&#xff0c;有时候会因为登录问题找不到注销的controller。所以会报404的错误&#xff0c;下面是解决办法&#xff1a; 1.首先写一个类SystemLogoutFilter继承LogoutFilter类&#xff0c;具体代码如下&#xff0c;注意要贴Service标签&#xff1a; impor…

介绍“又一个” Cloud Foundry Gradle插件

在与两个同事&#xff08;感谢Mark Alston &#xff0c; Dave Malone &#xff01;&#xff09;一起使用自动Jenkins管道部署Cloud Foundry应用程序的过程中&#xff0c;我决定尝试编写Gradle插件来执行一些通常需要完成的任务使用命令行Cloud Foundry Client完成 。 介绍带有…

卓金武——从数学建模到MATLAB

卓金武——从数学建模到MATLAB 2013-9-4 09:48| 发布者: ilovematlab| 查看: 9647| 评论: 40 摘要: 人物简介——卓金武&#xff08;Steven&#xff09;&#xff0c;MathWorks公司中国区应用工程师。在科学计算、定量优化、数学建模和数据挖掘领域拥有8年经验。曾3次获全国大学…

[Java开发]打印当前路径到控制台

开发时候&#xff0c;遇到了系统找不到配置文件的情况&#xff0c;定位到文件路径的问题之后&#xff0c;选择将当前路径打印到控制台。 File directory new File("");//设定为当前文件夹 try{ System.out.println(directory.getCanonicalPath());//获取标准的路径 …

latex中report目录_LaTeX目录格式控制

章节结构控制章节层次一个文档的最高层章节可以是part&#xff0c;也可以没有part直接是chapter/section。除了part以外&#xff0c;只有在上一层章节存在时&#xff0c;才可以使用下一层章节。章节层次示意图如下&#xff0c;方框代表文档类型&#xff0c;圆圈代表章节层次。对…

诸葛亮给子书

夫君子之行&#xff0c;静以修身&#xff0c;俭以养德&#xff1b;非澹泊无以明志&#xff0c;非宁静无以致远。   夫学须静也&#xff0c;才须学也&#xff1b;非学无以广才&#xff0c;非志无以成学。   怠慢则不能励精&#xff0c;险躁则不能冶性。   年与时驰&…

conda 安装mysql_centos7安装mysql

一、安装YUM Repo1、由于CentOS 的yum源中没有mysql&#xff0c;需要到mysql的官网下载yum repo配置文件。官方网址&#xff1a;https://dev.mysql.com/downloads/repo/yum/下载命令&#xff1a;wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm2、…

智能批处理

我们都有多少次听说“分批处理”会增加延迟&#xff1f; 作为对低延迟系统充满热情的人&#xff0c;这让我感到惊讶。 以我的经验&#xff0c;正确完成批处理不仅可以提高吞吐量&#xff0c;还可以减少平均延迟并保持一致。 那么&#xff0c;批处理如何神奇地减少延迟呢&#x…

cogs 76. [NOIP2007] 统计数字

【问题描述】 某次科研调查时得到了n个自然数&#xff0c;每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个&#xff0c;现在需要统计这些自然数各自出现的次数&#xff0c;并按照自然数从小到大的顺序输出统计结果。 【输入格式】 输入文件pcount.in包…

javaweb之Filter详解

一、概念&#xff1a;Filter也称之为过滤器&#xff0c;它是Servlet技术中比较激动人心的技术&#xff0c;WEB开发人员通过Filter技术&#xff0c;对web服务器管理的所有web资源&#xff1a;例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截&#xff0c;从而实现一些…

pause容器作用_Kubernetes学习之pause容器

根据代码看到,pause容器运行着一个非常简单的进程,它不执行任何功能,一启动就永远把自己阻塞住了,它的作用就是扮演PID1的角色,并在子进程称为"孤儿进程"的时候,通过调用wait()收割这个子进程,这样就不用担心我们的Pod的PID namespace里会堆满僵尸进程了,这也是为什么…

Spring Integration –轮询文件的创建和修改

1引言 文件支持是Spring Integration与外部系统通信的另一个端点。 在这种情况下&#xff0c;它提供了几个组件来读取&#xff0c;写入和转换文件。 在这篇文章中&#xff0c;我们将编写一个监视目录的应用程序&#xff0c;以便读取其中的所有文件。 具体而言&#xff0c;它执行…

为什么需要消息队列MQ

主要原因&#xff1a;是在高并发情况下&#xff0c;由于来不及同步处理&#xff0c;请求往往会发生堵塞&#xff0c;比如诸多的insert、update之类的请求同时到达mysql&#xff0c;直接导致无数的行锁表锁&#xff0c;甚至最后请求会堆积很多&#xff0c;从而触发大量的too man…

数据库连接池的使用

关于数据库连接池的使用&#xff0c;首先我们要明白我们为什么要用它&#xff0c;对应普通的数据库连接操作&#xff0c;通常会涉及到以下一些操作是比较耗时的&#xff1a; 网络通讯&#xff0c;涉及到网络延时及协议通讯身份验证&#xff0c;涉及安全性检查连接合法性检查&a…

mysql基础知识整理_MYSQL基础知识整理

目录1、客户端命令2、服务器端命令3、常用数据类型3.1、数值型3.2、字符型3.3、日期时间型3.4、布尔型4、mysql的执行方式5、用户管理1、客户端命令客户端命令不需要以分号结尾 &#xff0c;如果想获取客户端命令的帮助信息则&#xff1a;mysql> helpmysql常用客户端命令如下…

python 学习DAY11

动态传参 形参* # 聚合所有位置参数的实参 实参* #打散一个位置参数成多个 形参** #聚合所有关键词参数 实参** #打散实参的关键词参数 命名空间 第一种 内置名称空间 第二种 全局名称空间 第三中 局部名臣空间 作用域 全局作用域(是内置的,全局也可以调用) 局部作用域(局部可调…

【网络技术设备安全】BGP 基础与概述-2-中转 AS 中的 IBGP 路由传递

0x01 中转 AS 中的 IBGP 路由传递 参考该图&#xff1a; 上图&#xff0c;我们模拟一个 1.0 的路由通过 AS 65101 来传递 1&#xff1a;通过图可知&#xff0c;A 与 B 之间的 Peer 为 EBGP&#xff0c;B 与 E 之间为 Peer IBGP&#xff0c;E 与 F 之间为 Peer EBGP 邻接 2&a…

python函数变量的作用域_学不会的Python函数——变量作用域

1. LEGB函数Python中&#xff0c;程序的变量并不是在哪个位置都可以访问的&#xff0c;访问权限决定于这个变量是在哪里赋值的。我们先来看一段代码。上述代码有两个变量a&#xff0c;当在test函数中输出变量a的值是&#xff0c;为什么输出的是20&#xff0c;而不是10呢&#x…

浅谈JSP表单中的form传值

不同JSP页面之间、不同action之间,以及JSP中form与其对应的action之间,JSP中form与其不对应的action之间如何传值。本文将介绍JSP表单中的form传值。 JSP表单中的form传值 页面间链接和数据传递的三种方式 &#xff08;1&#xff09;通过JSP表单form将数据提交到下一个页面&…

react.js从入门到精通(一)

web端三大框架react、vue和angular&#xff0c;下面是对react.js的一些总结。 一、环境搭建 1、npm搭建项目 推荐使用npm搭建项目环境&#xff0c;如果网速过慢&#xff0c;可是使用cnpm进行项目的搭建&#xff08;cnpm是淘宝的npm镜像&#xff0c;与npm有些差异&#xff0c;有…