码迷,mamicode.com
首页 > 其他好文 > 详细

大数据去重复

时间:2020-07-23 18:59:01      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:arraylist   lap   sed   去重   alt   pac   检查   void   mem   

技术图片
package com.zsins.risk.util;

import java.io.Serializable;

public class LongMap implements BitMap, Serializable  {
    
    private static final long serialVersionUID = 1L;



    private final long[] longs;



    /**

     * 构造

     */

    public LongMap() {

        longs = new long[93750000];

    }



    /**

     * 构造

     * 

     * @param size 容量

     */

    public LongMap(int size) {

        longs = new long[size];

    }



    @Override

    public void add(long i) {

        int r = (int) (i / BitMap.MACHINE128);

        long c = i % BitMap.MACHINE128;

        longs[r] = longs[r] | (1L << c);

    }



    @Override

    public boolean contains(long i) {

        int r = (int) (i / BitMap.MACHINE128);

        long c = i % BitMap.MACHINE128;

        return ((longs[r] >>> c) & 1) == 1;

    }



    @Override

    public void remove(long i) {

        int r = (int) (i / BitMap.MACHINE128);

        long c = i % BitMap.MACHINE128;

        longs[r] &= ~(1L << c);

    }



}
LongMap
技术图片
package com.zsins.risk.util;



/**

 * BitMap接口,用于将某个int或long值映射到一个数组中,从而判定某个值是否存在

 * 

 * @author looly

 *

 */

public interface BitMap{



    int MACHINE32 = 32;

    int MACHINE64 = 64;
    
    int MACHINE128 = 128;



    /**

     * 加入值

     * 

     * @param i 值

     */

    void add(long i);



    /**

     * 检查是否包含值

     * 

     * @param i 值

     * @return 是否包含

     */

    boolean contains(long i);



    /**

     * 移除值

     * 

     * @param i 值

     */

    void remove(long i);

}
BitMap
public static void main(String[] args) {
		try {
			//第一种:借助BitMap,LongMap;位图去重
			//存在局限性:这个方法只适合long类型;
			System.out.println("----------1:"+System.currentTimeMillis());
			BitMap bitMap = new LongMap();
			for(long i = 0 ;i<1000000L;i++){
				bitMap.add(i);
			}
			System.out.println("----------2:"+System.currentTimeMillis());
			for(long j = 0 ;j<1000000L;j++){
				bitMap.contains(j);
				if(j < 10){
					System.out.println("----------3:"+bitMap.contains(j));
				}
			}
			
			//第二种:Set<Strig>方法去重;效率同样很快
			/*
			final Set<String> des = new HashSet<String>();
			final List<String> sourse = new ArrayList<String>();
			for(int i=0;i<1000000;i++){
				des.add("10000000000"+i);
				if(i<10000){
					sourse.add("10000000000"+i);
				}else{
					sourse.add("20000000000"+i);
				}
			}
			
			if (sourse == null || sourse.size() <= 0) {
	            return;
	        }
			System.out.println("------111:"+sourse.size());
			System.out.println("----------1:"+System.currentTimeMillis());
	        Iterator<String> listStr = sourse.iterator();
	        while (listStr.hasNext()) {
	            String item = listStr.next();
	            if (des.contains(item)) {
	                listStr.remove();
	            }
	        }
	        System.out.println("------222:"+sourse.size());
			System.out.println("----------3:"+System.currentTimeMillis());*/
		} catch (Exception e) {
			System.out.println(e.getStackTrace());
			// TODO: handle exception
			System.out.println(e);
		}
		
	}

 

大数据去重复

标签:arraylist   lap   sed   去重   alt   pac   检查   void   mem   

原文地址:https://www.cnblogs.com/hmhhz/p/13366248.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!