⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hashing.java

📁 java 的源代码
💻 JAVA
字号:
package com.reddragon2046.base.utilities.data.algorithms;

import com.reddragon2046.base.utilities.data.InputIterator;
import com.reddragon2046.base.utilities.data.util.IteratorFactory;
import java.util.Collection;

public final class Hashing
{

    private Hashing()
    {
    }

    public static int orderedHash(Collection c)
    {
        return orderedHash(IteratorFactory.start(c), IteratorFactory.finish(c));
    }

    private static int orderedHash(InputIterator first, InputIterator last)
    {
        if(!first.isCompatibleWith(last))
            throw new IllegalArgumentException("iterators not compatible");
        int h = 0;
        int length = first.distance(last);
        int position = 0;
        int skip = 1;
        if(length >= 16)
        {
            skip = length / 16;
            first.advance(length % 16);
        }
        for(InputIterator firstx = (InputIterator)first.clone(); !firstx.equals(last); firstx.advance(skip))
        {
            Object obj = firstx.get();
            if(obj != null)
                h ^= obj.hashCode() / (position % 16 + 1);
            position++;
        }

        return h;
    }

    public static int unorderedHash(Collection c)
    {
        return unorderedHash(IteratorFactory.start(c), IteratorFactory.finish(c));
    }

    private static int unorderedHash(InputIterator first, InputIterator last)
    {
        if(!first.isCompatibleWith(last))
            throw new IllegalArgumentException("iterators not compatible");
        int h = 0;
        for(InputIterator firstx = (InputIterator)first.clone(); !firstx.equals(last); firstx.advance())
        {
            Object obj = firstx.get();
            if(obj != null)
                h ^= obj.hashCode();
        }

        return h;
    }

    static final int HASH_SIZE = 16;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -