Esta obra tem como objectivo fornecer uma competência sólida no desenvolvimento de programas de média e elevada complexidade e um conhecimento profundo sobre estruturas de dados avançadas e algoritmos complexos, usando a linguagem de programação Java e aplicando o paradigma da programação orientada a objectos. Inclui exemplos, exercícios, programas e leituras recomendadas, com vista a facilitar a aprendizagem dos alunos. O livro está organizado em cinco grandes temas:Estudo do paradigmada programação orientada a objectos na linguagem Java, apresentando os aspectos fundamentais para implementar tipos de dados abstractos concretos e genéricos paramétricos; Estudo das principais estruturas de dados dinâmicas: listas simplesmente ligadas (singly linked lists), listas duplamente ligadas (doubly linked lists), listas ligadas com atalhos (skip lists), árvores binárias de pesquisa (binary search trees), árvores de Adelson-Velskii Landis (AVL trees), árvores rubinegras (red black trees), árvores auto-equilibradas (splay trees) e amontoados binários (binary heaps); Estudo das principais classes de algoritmos: recursivos, pesquisa, selecção, ordenação, pesquisa exaustiva e numéricos; Estudo da implementação dos diferentes tipos de memórias: fila (Queue), pilha (Stack), associativa (Content Access Memory) e fila com prioridade (Priority Queue);Estudo do tipo de dados abstracto grafo/dígrafo e seus algoritmos mais importantes: travessias em largura e em profundidade, ordenação topológica, detecção de componentes fortemente conexas, caminhos mais curtos, árvore abrangente de custo mínimo, fecho transitivo, e caminhos e circuitos hamiltonianos e eulerianos.