# Class XxHash

java.lang.Object
org.apache.datasketches.hash.XxHash

public final class XxHash extends Object
The XxHash is a fast, non-cryptographic, 64-bit hash function that has excellent avalanche and 2-way bit independence properties. This java version adapted the C++ version and the OpenHFT/Zero-Allocation-Hashing implementation referenced below as inspiration.

The C++ source repository: https://github.com/Cyan4973/xxHash. It has a BSD 2-Clause License: http://www.opensource.org/licenses/bsd-license.php. See LICENSE.

Portions of this code were adapted from OpenHFT/Zero-Allocation-Hashing, which has an Apache 2 license as does this site. See LICENSE.

Author:
  Lee Rhodes

## Method Summary

Modifier and Type
Method
Description
`static long`
`hashByteArr(byte[] arr, int offsetBytes, int lengthBytes, long seed)`
Hash the given arr starting at the given offset and continuing for the given length using the given seed.
`static long`
`hashCharArr(char[] arr, int offsetChars, int lengthChars, long seed)`
Hash the given arr starting at the given offset and continuing for the given length using the given seed.
`static long`
`hashDoubleArr(double[] arr, int offsetDoubles, int lengthDoubles, long seed)`
Hash the given arr starting at the given offset and continuing for the given length using the given seed.
`static long`
`hashFloatArr(float[] arr, int offsetFloats, int lengthFloats, long seed)`
Hash the given arr starting at the given offset and continuing for the given length using the given seed.
`static long`
`hashIntArr(int[] arr, int offsetInts, int lengthInts, long seed)`
Hash the given arr starting at the given offset and continuing for the given length using the given seed.
`static long`
`hashLong(long in, long seed)`
Returns a 64-bit hash from a single long.
`static long`
`hashLongArr(long[] arr, int offsetLongs, int lengthLongs, long seed)`
Hash the given arr starting at the given offset and continuing for the given length using the given seed.
`static long`
`hashShortArr(short[] arr, int offsetShorts, int lengthShorts, long seed)`
Hash the given arr starting at the given offset and continuing for the given length using the given seed.
`static long`
`hashString(String str, int offsetChars, int lengthChars, long seed)`
Hash the given arr starting at the given offset and continuing for the given length using the given seed.

### Methods inherited from class Object

`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Method Details

### hashByteArr

public static long hashByteArr(byte[] arr, int offsetBytes, int lengthBytes, long seed)
Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `arr` - the given array
  `offsetBytes` - starting at this offset
  `lengthBytes` - continuing for this length
  `seed` - the given seed
Returns:
  the hash

### hashShortArr

public static long hashShortArr(short[] arr, int offsetShorts, int lengthShorts, long seed)
Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `arr` - the given array
  `offsetShorts` - starting at this offset
  `lengthShorts` - continuing for this length
  `seed` - the given seed
Returns:
  the hash

### hashCharArr

public static long hashCharArr(char[] arr, int offsetChars, int lengthChars, long seed)
Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `arr` - the given array
  `offsetChars` - starting at this offset
  `lengthChars` - continuing for this length
  `seed` - the given seed
Returns:
  the hash

### hashIntArr

public static long hashIntArr(int[] arr, int offsetInts, int lengthInts, long seed)
Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `arr` - the given array
  `offsetInts` - starting at this offset
  `lengthInts` - continuing for this length
  `seed` - the given seed
Returns:
  the hash

### hashLongArr

public static long hashLongArr(long[] arr, int offsetLongs, int lengthLongs, long seed)
Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `arr` - the given array
  `offsetLongs` - starting at this offset
  `lengthLongs` - continuing for this length
  `seed` - the given seed
Returns:
  the hash

### hashLong

public static long hashLong(long in, long seed)
Returns a 64-bit hash from a single long. This method has been optimized for speed when only a single hash of a long is required.

Parameters:
  `in` - A long.
  `seed` - A long valued seed.
Returns:
  the hash.

### hashFloatArr

public static long hashFloatArr(float[] arr, int offsetFloats, int lengthFloats, long seed)
Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `arr` - the given array
  `offsetFloats` - starting at this offset
  `lengthFloats` - continuing for this length
  `seed` - the given seed
Returns:
  the hash

### hashDoubleArr

public static long hashDoubleArr(double[] arr, int offsetDoubles, int lengthDoubles, long seed)
Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `arr` - the given array
  `offsetDoubles` - starting at this offset
  `lengthDoubles` - continuing for this length
  `seed` - the given seed
Returns:
  the hash

### hashString

public static long hashString(String str, int offsetChars, int lengthChars, long seed)
Hash the given arr starting at the given offset and continuing for the given length using the given seed.

Parameters:
  `str` - the given string
  `offsetChars` - starting at this offset
  `lengthChars` - continuing for this length
  `seed` - the given seed
Returns:
  the hash