每日热文

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

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


来源: 拓海

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


本系列:


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

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

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

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

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

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

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

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

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

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

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;

}


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

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技能

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