如果直接将几百万数据仍到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. 动手学深度学习6-认识Fashion_MNIST图像数据集

    获取数据集 读取小批量样本 小结 本节将使用torchvision包,它是服务于pytorch深度学习框架的,主要用来构建计算机视觉模型. torchvision主要由以下几个部分构成: torchv ...

  2. ROS融合IMU笔记

    ROS官网有一个叫robot_pose_ekf的包,是专门处理传感器融合的包,具体介绍:http://wiki.ros.org/robot_pose_ekf 其中主要功能是订阅主题包括odom(里程计 ...

  3. jsp之el表达式jstl标签

    不管是el表达式还是jstl标签最终的目的都是要消除jsp中的java代码,当然是消除显式的java代码 el表达式的出现是为了简化jsp中读取数据并写入页面的操作. el表达式的功能不多,也很好记 ...

  4. 使用arcpy添加grb2数据到镶嵌数据集中

    #!coding: utf-8 import numpy as np import arcpy def addGRB2ToMosaic(grb2name): print "start add ...

  5. NPOI中的PhysicalNumberOfCells 与 LastCellNum

    这两个理论上一个是算空列,一个不算空列,但是实际上有时候相同数据的excel,不同的excel编辑工具保存后的,PhysicalNumberOfCells可能不一样,会导致莫名其妙错误,最好使用Las ...

  6. VUE面刷新

    1.这种方法页面会一瞬间的白屏 ) 2.这种也是一样,画面一闪 location.reload() 3.搭配provide.inject使用 首先在主页面 app.vue 设置: <keep-a ...

  7. Asp.net MVC企业级开发(04)---SignalR消息推送

    Asp.net SignalR是微软为实现实时通信而开发的一个类库.可以适用于以下场景: 聊天室,如在线客服系统,IM系统等 股票价格实时更新 消息的推送服务 游戏中人物位置的实时推送 SignalR ...

  8. Layer.js弹层的一些简单的使用

    //-----------这里只是简单的做一下记录,没有封装,作为笔记防止忘记了 //----contentMsg 里面是可以传入 HTML代码的 top.layer.alert(contentMsg ...

  9. Mybatis逆向工程的使用。

    指定配置文件与main运行生成 public class GeneratorSqlmap { public void generator() throws Exception { List<St ...

  10. Loadsh 常用方法总结以及在vue中使用Loadsh

    Loadsh 常用方法总结以及在vue中使用Loadsh Lodash 是一个一致性.模块化.高性能的 JavaScript 实用工具库.处理复杂数组,对比等可以直接采用该库,也方便快捷. 官方网站 ...