sexta-feira, 13 de julho de 2012

Copiar o conteúdo de uma lista para outra lista em java

Introdução



Hoje vou explicar de maneira simples e rápida como copiar todos itens de uma lista para uma outra lista (java.util.List), sendo possível modificar o conteúdo das listas sem interferir uma na outra, como ocorre normalmente quando é simplesmente copiada a referência da variável.


Copia com referência

Caso você deseja copiar um referência de uma lista para outra basta utilizar o sinal de igual (=) para atribuir o valor da lista a a lista b, porém sempre que for alterado o conteúdo de uma das listas o valor da outra também será modificado.


Sintaxe:

List  listaA = new ArrayList();
listaA.add(Item_T);
listaA.add(Item_T);

List  listaB = listaA;


Onde:

Tipo_T - Tipo de objecto que a lista guarda.
Item_T - Item adicionado a lista.



Abaixo é possível visualizar um exemplo de um programa  onde é copiado o conteúdo de uma lista para outra contendo referência na memória de seu conteúdo.


import java.util.ArrayList;
import java.util.List;

public class CopyList {

    public static void main(String args[]) {

        List listaOriginal  = new ArrayList();
        listaOriginal.add("A");
        listaOriginal.add("B");
        listaOriginal.add("C");
       
        System.out.println("Lista Original");
        exibirLista(listaOriginal);
       
        List listaCopia  = listaOriginal;
       
        System.out.println("Lista Cópia");
        exibirLista(listaCopia);
        listaCopia.clear();
       
        System.out.println("Lista Cópia");
        exibirLista(listaCopia);
       
        System.out.println("Lista Original");
        exibirLista(listaOriginal);
       
    }

    public static void exibirLista(List lista) {
        for (String i : lista) {
            System.out.print(i);
        }
        System.out.println();
    }
}



Abaixo é possível visualizar a execução do código acima.


 

 

Copia sem referência


Caso você deseja copiar uma lista para outra tornando possível a modificação do conteúdo de ambas sem que haja conflito no conteúdo uma da outra é necessário utilizar um processo bem simples (não que seja o único), basta colocar o lista a dentro do construtor da lista b.


Sintaxe:

List  listaA = new ArrayList();
listaA.add(Item_T);
listaA.add(Item_T);

List  listaB = new ArrayList(listaA);


Onde:

Tipo_T - Tipo de objecto que a lista guarda.
Item_T - Item adicionado a lista.

Abaixo é possível visualizar um exemplo de cópia sem referência:

import java.util.ArrayList;
import java.util.List;

public class CopyList {

    public static void main(String args[]) {

        List listaOriginal  = new ArrayList();
        listaOriginal.add("A");
        listaOriginal.add("B");
        listaOriginal.add("C");
       
        System.out.println("Lista Original");
        exibirLista(listaOriginal);
       
        List listaCopia  = new ArrayList(listaOriginal);
       
        System.out.println("Lista Cópia");
        exibirLista(listaCopia);
        listaCopia.clear();
       
        System.out.println("Lista Cópia");
        exibirLista(listaCopia);
       
        System.out.println("Lista Original");
        exibirLista(listaOriginal);
       
    }

    public static void exibirLista(List lista) {
        for (String i : lista) {
            System.out.print(i);
        }
        System.out.println();
    }
}



Abaixo é possível visualizar a execução do código acima.

Nenhum comentário:

Postar um comentário