如果直接将几百万数据仍到bitset,内存是否够用?实际测试,600万ip放到一个bitSet中,jvm内存会爆。

所以,就简单做了下分组,构建一个HashMap<String, BitSet>,

以192.168.6.2为例,将192.168直接截取为字符串,当作hashmap的key,后2位补零为006002,将006002放入“192.168”分组的bitSet中。

适用场景:

这种构建bitSet的去重方式,适合判断某个ip是否在百万级的ip集合中。

 不适用输入一个百万级ip集合,去重后输出这个结果集。

代码如下:

import java.util.BitSet;
import java.util.HashMap;
public class DistcIp {
public static void main(String[] args) {
  HashMap<String, BitSet> groupBitSet=new HashMap<String, BitSet>();
  //先遍历ip,
  String ip1="192.168.0.3";
  String ip2="192.168.0.4";
  String ip3="192.162.0.6";
  String ip4="192.162.0.6";
  String ip5="192.157.0.4";   String[] strs=new String[] {ip1,ip2,ip3,ip4,ip5};   for (String cip : strs) {
  String group=getBitSetGroup4IP(cip);
  int value=getBitSetValue4IP(cip);
  if(groupBitSet.containsKey(group)) {
    groupBitSet.get(group).set(value);
  }else {
    BitSet bs= new BitSet();
    bs.set(value);
    groupBitSet.put(group, bs);
  }
 }   String group2=getBitSetGroup4IP(ip1);
  int value2=getBitSetValue4IP(ip1);
  BitSet bs=groupBitSet.get(group2);
  System.out.println(bs.get(value2));   String group3=getBitSetGroup4IP("192.168.0.1");
  int value3=getBitSetValue4IP("192.168.0.1");
  BitSet b3=groupBitSet.get(group3);
  System.out.println(b3.get(value3));
}   /**
  * 用来构建BitSet数值;
  * @param ip
  * @return int
  */
  static int getBitSetValue4IP(String ip){
    String[] ips=ip.split("\\.");
    if(ips.length!=4) return 0;
    String tmp=formatVal(ips[2])+formatVal(ips[3]);
    return Integer.valueOf(tmp);
  }   /**
  * 用来构建BitSet分组;
  * @param ip
  * @return String
  */
  String getBitSetGroup4IP(String ip){
    String[] ips=ip.split("\\.");
    if(ips.length!=4) return null;
    return ips[0]+"."+ips[1];
  }   //这个是用来补零的,如:125.42.1.8 ->125.042.001.008
  static String formatVal(String s) {
    String res="";
    char[] ca=s.toCharArray();
    for(int i=ca.length;i<3;i++) {
      res+="0";
    }
    return res+s;
  }
}

用bitSet做百万级ip去重的更多相关文章

  1. 用FlexGrid做开发,轻松处理百万级表格数据

    表格数据处理是我们项目开发中经常会遇到的设计需求之一,所需处理的数据量也较大,通常是万级.甚至百万级.此时,完全依赖平台自带的表格工具,往往无法加载如此大的数据量,或者加载得很慢影响程序执行. 那么, ...

  2. 如何生成每秒百万级别的 HTTP 请求?

    第一篇:<如何生成每秒百万级别的 HTTP 请求?> 第二篇:<为最佳性能调优 Nginx> 第三篇:<用 LVS 搭建一个负载均衡集群> 本文是构建能够每秒处理 ...

  3. Netty系列之Netty百万级推送服务设计要点

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  4. Netty_Netty系列之Netty百万级推送服务设计要点

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  5. 【netty】Netty系列之Netty百万级推送服务设计要点

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  6. FW 每秒百万级别的 HTTP 请求 sung: 重型的(heavy-duty)、分布式的、多协议测试工具

    本文是构建能够每秒处理 3 百万请求的高性能 Web 集群系列文章的第一篇.它记录了我使用负载生成器工具的一些经历,希望它能帮助每一个像我一样不得不使用这些工具的人节省时间. 负载生成器是一些生成用于 ...

  7. 阿里云云盾抗下全球最大DDoS攻击(5亿次请求,95万QPS HTTPS CC攻击) ,阿里百万级QPS资源调度系统,一般的服务器qps多少? QPS/TPS/并发量/系统吞吐量

    阿里云云盾抗下全球最大DDoS攻击(5亿次请求,95万QPS HTTPS CC攻击) 作者:用户 来源:互联网 时间:2016-03-30 13:32:40 安全流量事件https互联网资源 摘要:  ...

  8. Netty系列之Netty百万级推送服务设计要点(转)

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  9. 每秒处理3百万请求的Web集群搭建-如何生成每秒百万级别的 HTTP 请求?

    本文是构建能够每秒处理 3 百万请求的高性能 Web 集群系列文章的第一篇.它记录了我使用负载生成器工具的一些经历,希望它能帮助每一个像我一样不得不使用这些工具的人节省时间. 负载生成器是一些生成用于 ...

随机推荐

  1. linux centos7下源码 tar安装mysql5.7.22或mysql5.7.20 图文详解

    之前用的rpm安装的每次安装都是最新的,,,导致每次版本不统一... 现在用tar包安装5.7.22和5.7.20一样的   5.7.20之后的和之前的版本还是有点不一样的 官网地址 https:// ...

  2. C++中的双冒号作用

    1. 作用域符号::的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分如:A,B表示两个类,在A,B中都有成员member.那么      ...

  3. Django学习——全局templates引用的问题

    一.问题在构建网站的时候我们会用到全局的templates处理错误的网页,此时我们需要对urls进行一个映射,使得在使用的时候避免重复调用.在使用的时候还会产生错误代码:第一个是404界面的,第二个是 ...

  4. 【BZOJ4833】最小公倍佩尔数(min-max容斥)

    [BZOJ4833]最小公倍佩尔数(min-max容斥) 题面 BZOJ 题解 首先考虑怎么求\(f(n)\),考虑递推这个东西 \((1+\sqrt 2)(e(n-1)+f(n-1)\sqrt 2) ...

  5. MobaXterm的安装和使用

    MobaXterm的安装和使用 安装 1 下载网址:https://mobaxterm.mobatek.net/,选择“Download”,选择免费版的下载. 2 解压压缩包,双击exe文件安装软件, ...

  6. 基于JDK1.8,Java容器源码分析

    容器源码分析 如果没有特别说明,以下源码分析基于 JDK 1.8. 在 IDEA 中 double shift 调出 Search EveryWhere,查找源码文件,找到之后就可以阅读源码. Lis ...

  7. vim进阶

    输入终端命令:!+命令 sudo保存:w !sudo tee % 显示当前路径::pwd 查看缓冲区::ls 打开缓冲区文件:buffer 2 命令补全:Tab键 :r!date读shell日期到vi ...

  8. ztree实现复选框单选功能

    /** * ztree的默认配置项 * */ var setting = { view: { selectedMulti: false //按住ctrl是否可以多选 }, check: { enabl ...

  9. 生成Uuid工具类

    package com.freeter.util; import java.util.UUID; /** * @author liuqi * **/public class Uuid{ public ...

  10. 超快速度下载MNIST数据集

    Download mnist dataset and extract in 1 second! For Caffe users: create $CAFFE/data/mnist/get_mnist_ ...