微信号:PythonCoder

介绍:人生苦短,我用 Python.伯乐在线旗下账号「Python开发者」分享 Python 相关的技术文章、工具资源、精选课程、热点资讯等.

手把手教你写网络爬虫(7):URL去重

2018-05-17 19:50 Python开发者

(点击上方公众号,可快速关注)


来源: 拓海

http://www.cnblogs.com/tuohai666/p/8949393.html


本系列:


IPv6编码地址数:2^128(约3.4×10^38)

IPv6是IETF设计的用于替代现行版本IP协议(IPv4)的下一代IP协议,号称可以为全世界的每一粒沙子编上一个网址。

public <T> boolean put(T object, Funnel<? super T> funnel, int numHashFunctions, BitArray bits) {

    long bitSize = bits.bitSize();

    long hash64 = Hashing.murmur3_128().hashObject(object, funnel).asLong();

    int hash1 = (int) hash64;

    int hash2 = (int) (hash64 >>> 32);

 

    boolean bitsChanged = false;

    for (int i = 1; i <= numHashFunctions; i++) {

        int combinedHash = hash1 + (i * hash2);

        // Flip all the bits if it's negative (guaranteed positive number)

        if (combinedHash < 0) {

            combinedHash = ~combinedHash;

        }

        bitsChanged |= bits.set(combinedHash % bitSize);

    }

    return bitsChanged;

}


boolean set(long index) {

    if (!get(index)) {

        data[(int) (index >>> 6)] |= (1L << index);

        bitCount++;

        return true;

    }

    return false;

}

  

boolean get(long index) {

    return (data[(int) (index >>> 6)] & (1L << index)) != 0;

}


02 先get()一下,看看是不是已经置为1。

03 index右移6位就是除以64,说明data是long型的数组,除以64就定位到了bit所在的数组下标。1L左移index位,定位到了bit在long中的位置。


看完本文有收获?请转发分享给更多人

关注「Python开发者」,提升Python技能

 
Python开发者 更多文章 趣图:Python 生态环境 雷军的留名,不是以程序员身份 假装很忙的三个命令行工具 教你如何用Python正经地八卦:运动员美好身材鉴赏指南 手把手教你写网络爬虫(5):PhantomJS实战
猜您喜欢 写给程序员的 Unicode 入门介绍 数据库系列三:事务(下) 当我们想接第三方支付时,我们在谈些什么? 怎样靠一篇文章同时了解技术趋势、职业成长和实践细节? 【最新】博赛网络最新课程安排