Building a Fast, Memory-Efficient Hash Table in Java (by borrowing the best ideas)