Skip to content

Conversation

@dinilH
Copy link

@dinilH dinilH commented Oct 30, 2025

Description

Add FNV-1a (Fowler-Noll-Vo) non-cryptographic hash function implementation.

Changes

  • Add FNV1aHash.java with 32-bit and 64-bit variants
  • Add comprehensive test suite with 30+ unit tests

Why This Contribution?

  • FNV-1a is a widely-used, fast hash function
  • Missing from current algorithm collection
  • Educational value for understanding hash functions
  • Used in real-world applications (hash tables, checksums)

Testing

✅ All tests pass
✅ Edge cases covered (empty, null, Unicode)
✅ Consistency and distribution verified
✅ Both String and byte array inputs tested

References

- Implement FNV-1a (Fowler-Noll-Vo) non-cryptographic hash function
- Support both 32-bit and 64-bit hash variants
- Hash from String or byte array input
- Include hex string output methods
- All operations have O(n) time complexity where n is input length
- Space complexity O(1)

Features:
- Generic implementation supporting String and byte arrays
- Proper null handling with IllegalArgumentException
- Helper methods: hash32Hex() and hash64Hex() for hex output
- UTF-8 encoding support for Unicode characters
- Full JavaDoc documentation

FNV-1a properties:
- Fast computation using simple XOR and multiply operations
- Good hash distribution minimizing collisions
- Widely used in hash tables and checksums
- Not suitable for cryptographic purposes

Tests:
- 30+ comprehensive unit tests covering all methods
- Edge cases: empty string, null input, Unicode
- Consistency tests (same input -> same output)
- Distribution tests (different inputs -> different outputs)
- Both String and byte array input validation

Time Complexity: O(n) where n is input length
Space Complexity: O(1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant