Problemas com ordenação (Comparator ou Lista encadeada ?)

5 respostas
fabio.nascimento

Estou com o problema a seguir:

Preciso ordernar uma lista, até aí tudo bem aplico Comparator.

O problema começa quando dentro dessa ordenação eu preciso trocar um determinado atributo

Explicando melhor, digamos que eu tenha uma lista a seguir:

id,   nome, ordem
100  "V"      1
200  "V"      2
300  "V"      3
400  "V"      4
500  "C"      5
600  "C"      6
700  "C"      7
800  "A"      8
900  "A"      9

Onde o “C” tem prioridade sobre o “V” e “V” tem prioridade sobre A, dessa forma a lista deveria ficar:

id,   nome, ordem
500  "C"      1
600  "C"      2
700  "C"      3
100  "V"      4
200  "V"      5
300  "V"      6
400  "V"      7
800  "A"      8
900  "A"      9

E a cada nova inserção eu devo sempre respeitar a prioridade.

Estou pensando em fazer isso com lista encadeada, mas vejo que talvez eu teria sempre que saber o nó anterior e o posterior, coisa que não é meu caso, pelo fato de que teria que ficar recuperando sempre a posição de cada nó meu.

Jogando tudo isso em um List, ArrayList ou qq estrutura eu teria algo a fazer?

Alguma sugestão ou mesmo um xingamento?

Grato.

Fabio Nascimento

5 Respostas

T

Se eu tenho 2 coisas com a mesma chave (“C”, “V” etc), o ID é diferente, certo? Nesse caso, elas devem ficar ordenadas pelo ID se a chave for igual?

Você pode usar um TreeSet, que é ordenado automaticamente e impede haver 2 registros repetidos. Basta criar um Comparator que ordene primeiro pela chave, e depois pelo ID.

fabio.nascimento

thingol:
Se eu tenho 2 coisas com a mesma chave (“C”, “V” etc), o ID é diferente, certo? Nesse caso, elas devem ficar ordenadas pelo ID se a chave for igual?

Você pode usar um TreeSet, que é ordenado automaticamente e impede haver 2 registros repetidos. Basta criar um Comparator que ordene primeiro pela chave, e depois pelo ID.

hummm, entendi o que vc falou, mas na verdade esse não é meu problema.
O problema é que todos os C tem que vir primeiro mesmo que estejam sendo inseridos depois do V, por exemplo:

tenho meu array assim:

100 - V - 1
200 - V - 2

Quando eu for inserir o registro de id 300 que é C e o C tem prioridade sobre o V ele deveria ser encaixado antes dos outros empurrando assim os outros para baixo, ficando:

300 - C - 1
100 - V - 2
200 - V - 3

Posso até incluir o C no array e depois ordenar, não teria problema, o problema é que não estou achando uma solução prática e correta para isso.

Valeu.

ignacio83

De uma olhada nestes posts:

http://www.guj.com.br/posts/reply/0/126366.java
http://www.guj.com.br/posts/list/122714.java#663855
http://www.guj.com.br/posts/list/122844.java#664610

fabio.nascimento

ignacio83:
De uma olhada nestes posts:

http://www.guj.com.br/posts/reply/0/126366.java
http://www.guj.com.br/posts/list/122714.java#663855
http://www.guj.com.br/posts/list/122844.java#664610

Ignacio83, legal entendi.

Mas essa parte de ordenação é super tranquila, como disse, é só meter o comparator.

O problema mesmo é na encadeação da lista, sacou?

Mas valeu cara, se tiver qq dica aí, por favor.

Abraços.

Lavieri

fabio.nascimento:
ignacio83:
De uma olhada nestes posts:

http://www.guj.com.br/posts/reply/0/126366.java
http://www.guj.com.br/posts/list/122714.java#663855
http://www.guj.com.br/posts/list/122844.java#664610

Ignacio83, legal entendi.

Mas essa parte de ordenação é super tranquila, como disse, é só meter o comparator.

O problema mesmo é na encadeação da lista, sacou?

Mas valeu cara, se tiver qq dica aí, por favor.

Abraços.

se o seu problema é como inserir um valor no meio dos Nodos, esse meu arquivo Node, faz isso

=> http://www.guj.com.br/posts/list/126208.java#682722

nesse link tb tem um exemplo de lista encadeada usando a ordem normal, vc pode adpatar para uma ordem generica vinda de um comparator…

Mas se vc não é obrigaod a fazer com lista encadeada então a melhor solução é usar uma Collection ja pronta e definir o comparator

Criado 12 de maio de 2009
Ultima resposta 12 de mai. de 2009
Respostas 5
Participantes 4