Dúvida com regras de ordenação na estrutura TreeMap

Olá galera, tudo bem?

Bom seguinte, estou com um problema aqui que preciso implementar uma estrutura de dados em arvore, parecido com que ocorre no sistemas de diretorio do Unix e Windows ou com tabelas com auto-relacionamento em banco de dados.

Imaginem a estrutura de diretórios do Windows eu tenho o diretório C:\Arquivos e tbm tenho o C:\Documentos e dentro do primeiro eu tenho os seguintes diretórios C:\Arquivos\Fotos, C:\Arquivos\Programas e dentro do ultimo eu tenho o C:\Arquivos\Programas\Instaladores

Ou imaginando a ideia do auto-relacionamento em um banco de dados relacional tenho uma tabela chamada Colaborador com os seguintes campos:

Codigo (int PK)
Nome (String)
Chefe (int FK)

sendo que em um auto relacionamento eu possuo os códigos 1, 2, 11, 12 e 111, sendo que o 11 e 12 são dependentes do 1 e o 111 é dependente do 11

Preciso de uma estrutura de dados em Java em que eu possa implementar esse tipo de regra (chaves únicas com ou sem dependência de uma em forma de arvore).

Estudando um pouco o assunto verifiquei que existe a classe TreeMap da Collections Map, ela utiliza uma chave unica para armazenar cada elemento e que sua ordenação é por arvore (já é uma parte do que preciso). Verifiquei também que por default ela ordena as chaves de maneira crescente (1,2,3,4,5…) mas que você pode implementar regras para mudar o tipo de ordenação.

Minha dúvida é, como posso montar um algoritmo para que ela ordene sempre as chaves pai e suas respectivas filhas até as folhas? por exemplo:
1,11,111,12,2,3…

Desde já agradeço a ajuda :smiley:

Se os códigos fossem de 1 até 9, você poderia usar uma ordenação simples de strings:

1,11,111,12,2,3

Note que se você pegar esses números e compará-los como se fossem strings, você terá a comparação que deseja.

Se os códigos forem de 0 até 65535, você ainda pode usar a idéia de strings, porque uma String é um array de char, e um char vai de 0 até 65535.

Infelizmente, pelo que imagino, você pode ter códigos maiores que 65535, mas você pode usar o mesmo algoritmo da ordenação de strings, mas pode fazer uma ordenação, por exemplo, de int[] ou ArrayList.

obrigado pela ajuda entanglement.

Mas acredito que uma ordenação por arrays de string não daria certo nesse caso, pois quando por exemplo eu pesquiso o código 111, devo mostrar todo os seus antecessores “pais” (nesse caso o 1 e o 11), entao teria que ser em uma estrutura de arvore mesmo

alguma sugestão gente? :frowning: