Java structures : Data Structures in Java for the Principled Programmer