Ajuda com coleções  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
fsfnit
Java Ninja
[Avatar]

Membro desde: 16/05/2006 13:38:27
Mensagens: 283
Localização: Far Far Away - Niterói / RJ
Offline

Bom pessoal é o seguinte:

1) Preciso de uma coleção em que eu possa, por exemplo, começar inserindo o primeiro objeto em uma determinada posição, e não necessariamente na primeira posição dele. Ou seja, o primeiro objeto pode (e provavelmente será) inserido em uma posição aleatória desta coleção, que não será a 1ª. Porém esse tipo de comportamento gera ArrayOutOfBounds.

2) Nesta mesma coleção, caso eu insira um objeto em um index que já esteja ocupado, toda a coleção irá ser empurrada para baixo para que o objeto entre corretamente no index informado.

Alguem conhece alguma coleção ou algum modelo que me permita isso ?


Obrigado.
thiago.correa
GUJ Master
[Avatar]

Membro desde: 26/03/2006 18:54:30
Mensagens: 1861
Offline

Cara, a única maneira que me veio a cabeça foi essa



Pelo menos funcionou

---
"Se não puder ajudar, atrapalhe, afinal de contas o importante é participar!"
Thiago
[MSN]
leassis
Entusiasta Java
[Avatar]

Membro desde: 26/09/2006 10:36:59
Mensagens: 17
Offline

List (acho que qualquer implementacao) atende a necessidade 2. Agora a primeira na verdade eu não entendi o porque.
Ai qdo eu olho os dois requisitos nao entendo nada dá para dar umas marretadas que atendem a necessidade 1... mas não sou adepto desses modos

This message was edited 1 time. Last update was at 29/04/2010 11:06:55

[Yahoo!] [MSN] [ICQ]
leassis
Entusiasta Java
[Avatar]

Membro desde: 26/09/2006 10:36:59
Mensagens: 17
Offline

Thiago o seu código até atende, mas como ele não sabe qual o indice que ele quer inserir o size 10 no array pode dar pau.

A marretada mais correta (se é que existe marretada correta) poderia ser
sobrescrever o método add(indice, valor) de uma lista, e qdo ele fosse adicionar o item verificar se esse indice ja existe.. se ja existe ok.. adiciona e boa, se não existe insere uns null na lista até que vc possa adicionar.

Só que ai.. na hora de retirar esses itens da lista ele poderia pegar um monte de null, teria que fazer o tratamento na saida tb.

Marretada!!!!! talvez se tivermos o problema na mão seja mais fácil de entender melhor e tentar ajudar
[Yahoo!] [MSN] [ICQ]
luciano@@
Virtual Machine Man
[Avatar]

Membro desde: 28/04/2010 13:11:27
Mensagens: 527
Localização: Salvador,BA
Offline

Não entendo pq o elemento não pode ser inserido na primeira posição. Os espaços vazios da lista podem ser despresados então você pode criar uma constant de ordenação e a cada list.add(objetc) você pdoe usar um Collections.sort(list) para ordenar da forma q você quer.

As pessoas têm algo em comum. Sâo todas diferentes.
fsfnit
Java Ninja
[Avatar]

Membro desde: 16/05/2006 13:38:27
Mensagens: 283
Localização: Far Far Away - Niterói / RJ
Offline

Imagine o cenário:


Um protocolo proprietário me envia o dados da seguinte forma : (index, objeto). Onde o índice é a posição que o objeto deve ocupar numa lista.

Porém o index pode vir de forma desordenada, o index 4, por exemplo, pode chegar antes do index 1. Porém minha lista já deve estar organizada.
Pois pode chegar uma informação no protocolo, que o objeto xpto deve ser inserido na posição 4 também dessa lista, e por convenção, devo empurrar para o index 5 o objeto anterior para poder inserir o novo no index 4.





luciano@@
Virtual Machine Man
[Avatar]

Membro desde: 28/04/2010 13:11:27
Mensagens: 527
Localização: Salvador,BA
Offline

Uma estrutura com duas listas onde você

todos os elementos que estiverem em posições maior igual a que você deseja inserir, você insere na lista auxiliar e remove da principal. quando a posição estiver livre você insere seu elemento e coloca os elementos da lista auxiliar de volta a lista principal.



Fiz um teste aqui é funciona da forma que você quer. Teste ai e veja se resolve seu problema.

As pessoas têm algo em comum. Sâo todas diferentes.
leassis
Entusiasta Java
[Avatar]

Membro desde: 26/09/2006 10:36:59
Mensagens: 17
Offline

Esse código nao performa, a cada setObject vc varre as duas listas inteiras, se sua lista for grande a cada setObjet vai demorar uma eternidade.

O melhor (mas nao ideal) seria extender ArrayList e sobrescrever o metodo add(int, T) e aplicar a lógica la dentro, a lógica que eu mencionei no outro post.



luciano@@ wrote:Uma estrutura com duas listas onde você

todos os elementos que estiverem em posições maior igual a que você deseja inserir, você insere na lista auxiliar e remove da principal. quando a posição estiver livre você insere seu elemento e coloca os elementos da lista auxiliar de volta a lista principal.



Fiz um teste aqui é funciona da forma que você quer. Teste ai e veja se resolve seu problema.
[Yahoo!] [MSN] [ICQ]
luciano@@
Virtual Machine Man
[Avatar]

Membro desde: 28/04/2010 13:11:27
Mensagens: 527
Localização: Salvador,BA
Offline

Mas se o cara quer inserir na posição mesmo que ja exista elemento essa é a melhor forma de fazer. Talvez o algoritimo não seja o mais performático, mas a forma de fazer é essa.

Ao invês de percorrer ele poderia usar um System.arraycopy(array1, start1, array2, start2, length)

primeiro ele pega os itens do inicio, até a posição anterior a que ele quer inserir e adicionar em uma nova lista.
insere o novo elemento na nova lista.
e depois usa o array copy para pegar os elementos da posição que ele quer inserir até o final e adiciona na nova lista.
retorna a nova lista


As pessoas têm algo em comum. Sâo todas diferentes.
laudenpower
JavaEvangelist
[Avatar]

Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline

Encapsula o indice e o objeto dentro de um outro objeto e coloca esse objeto na lista. Me parece ser mais simples assim...

Enquanto cultivares teu saber, nada tens a temer!

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
luciano@@
Virtual Machine Man
[Avatar]

Membro desde: 28/04/2010 13:11:27
Mensagens: 527
Localização: Salvador,BA
Offline

Pelo que o cara explicou o problema não é tão simples assim.

Pelo que eu entendi ele quer q mesmo que ja exista um indice 4, se ele mandar inserir outro objeto no indice 4, o existente passa a ser o 5 e assim por diante. Vamos esperar que ele pronuncie.

As pessoas têm algo em comum. Sâo todas diferentes.
leassis
Entusiasta Java
[Avatar]

Membro desde: 26/09/2006 10:36:59
Mensagens: 17
Offline

SImples.. porém nao funcional
Pq vc perde a arvore, dai nao consegue mais usar polimorfismo entao toda a parte da java.util.Collections foi pro saco

laudenpower wrote:Encapsula o indice e o objeto dentro de um outro objeto e coloca esse objeto na lista. Me parece ser mais simples assim...
[Yahoo!] [MSN] [ICQ]
andredecotia
JWizard
[Avatar]

Membro desde: 19/10/2009 14:37:32
Mensagens: 2267
Localização: São Paulo
Offline

Ex:

--
André AS


Analista Programador Java Web freelancer / home office
Linkedin: http://www.linkedin.com/profile/view?id=41470291&trk=tab_pro

[Email] [MSN] [ICQ]
andredecotia
JWizard
[Avatar]

Membro desde: 19/10/2009 14:37:32
Mensagens: 2267
Localização: São Paulo
Offline




como essa lista pode estar vazia?


não é nela que as palavras foram adicionadas?

--
André AS


Analista Programador Java Web freelancer / home office
Linkedin: http://www.linkedin.com/profile/view?id=41470291&trk=tab_pro

[Email] [MSN] [ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team