[size=18]Boa noite pessoal,[/size]
sou novo aqui no forum qto à postagem pois sempre estou lendo os mais variados posts.
Bom meu problema é o seguinte.
Tenho um LinkedList de 1 milhão de posições e gostaria de quebrá-lo em um número x de listas filhas.
Gostaria de saber qual é a solução com menor custo computacional.
Por exemplo: gostaria de pegar uma sublist com os primeiros 200 elementos, depois só fazer a manipulação do ponteiro de head para que a lista original diminuisse de 200 posicoes, sem fazer interação para copia dos elementos.
Aguardo respostas para que possamos debater juntos!
Abraços
[quote=luizcarlos_rodrigues][size=18]Boa noite pessoal,[/size]
sou novo aqui no forum qto à postagem pois sempre estou lendo os mais variados posts.
Bom meu problema é o seguinte.
Tenho um LinkedList de 1 milhão de posições e gostaria de quebrá-lo em um número x de listas filhas.
Gostaria de saber qual é a solução com menor custo computacional.
Por exemplo: gostaria de pegar uma sublist com os primeiros 200 elementos, depois só fazer a manipulação do ponteiro de head para que a lista original diminuisse de 200 posicoes, sem fazer interação para copia dos elementos.
[/quote]
E que tal sem usar CPU nem escrever codigo ? Legal ahn ?
Com 1 milhão de itens tlv o seu problema não seja criar sublistas mas a forma mais simples
de fazer o que vc quer é usar o metodo sublist da interface List.
List sublist = original.subList(0,200);
LinkedList n = new LinkedList(sublist );
sublist.clear();
Boa tarde Sérgio.
Muito obrigado pela reposta.
Neste código que vc me passou, quando eu faler sublist.clear() ele não vai fazer interação item por item na lista original para excluir os elementos?
Vou te mostrar meu código pra ver se fica mais claro:
for(int i = 0; i < children; i++)
{
String localName = "children_" + i;
if( i == (children - 1))
{
sendVector = vector;
}
else
{
List sublist = vector.subList(0, (vector.size() / globalChildren));
sendVector = new LinkedList<Integer>(sublist);
vector.subList(0, vector.size() / globalChildren).clear();
globalChildren--;
}
args[0] = sendVector;
args[1] = locations.get(i);
//Creating Agent with two arguments: Vector and Location to move
AgentController childrenController = container.createNewAgent(localName, "AgenteFilho", args.clone());
//Starting Agent
childrenController.start();
}
children tem o valor mais ou menos entre 2 e 10!
vector tem 1000000 de inteiros e é uma LinkedList.
sendVector é uma LinkedList também.
Meu objetivo é fazer esta parte de código a mais otimizada possível!
Aguardo resposta
[quote=luizcarlos_rodrigues]Boa tarde Sérgio.
Muito obrigado pela reposta.
Neste código que vc me passou, quando eu faler sublist.clear() ele não vai fazer interação item por item na lista original para excluir os elementos?
[/quote]
Não sei. Isso é um detalhe da implementação de LinkedList. Voce pode ler o codigo fonte se tiver curiosidade.
Contudo eu acho que não por causa de ser linked, mas ele tem um processo de procura dos nodos mais lento.
Se isso o preocupa realmente muito implemente sua própria lista, da forma que acha mais eficiente e faça um bentchmark comparativo com ArrayList e LinkedList. Isto não é tarefa fácil.
Ou vc pode usar alguma Lista de projetos como Commons-Collections ou a Google Collections, mas duvido que haja muitas opções mais.
O que interessa é que vc não tem que iterar os elementos e que se pressupoe que a implementação de Linked é eficiente.