Objeto do ArrayList recebe endereço de outro objeto dentro do mesmo ArrayList

Boa noite!
Uma duvida: um objeto dentro do ArrayList do tipo primitivo,pode receber o endereço de memoria de outra posição desse mesmo ArrayList?Assim toda vez que for atualizar este objeto, tbm irá atualizar o campo referenciado.
Por exemplo: tenho o ArrayList: A-B-C-D quero q o objeto D (posição 3) “aponte” para A(posição 0), logo,se eu mudar a String D para D/A, a String A mude tbm para D/A.
teria como fazer isso?

Não sei se entendi certo o que vc quer.
Veja se é isso:

        int numeroTransferencia;
	
	List lista = new ArrayList();
	lista.add(001);
	lista.add(002);
	lista.add(003);
	lista.add(004);
	
	numeroTransferencia = (int) lista.get(0);
	
	lista.set(0, lista.get(2));
	lista.set(2, numeroTransferencia);

Nesse exemplo, eu guardo o valor da posição 0, pego o valor da posição 2 e seto na posição 0, e depois pego o valor antigo da posição 0 guardado na variável e seto na posição 2.
É isso que vc quer?

Você deve estar se confundindo com ponteiros (linguagem c e c++), em java você não manipula ponteiros diretamente, você manipula referências…

Quando você declara uma instância…

Object obj = new Object();

O que está do lado esquerdo antes do sinal de = se chama referência (grosseiramente um ponteiro), tendo isso em mente se quiser mais de uma por objeto basta…

Object obj2 = obj;

Agora tenho duas referências (ponteiros) para o mesmo objeto… tendo esse conceito em mente, posso adicionar as referências numa lista (afinal qualquer Collection e array guarda referências nunca objetos)…

List<Object> lista = new ArrayList<>();
lista.add(obj);
lista.add(obj2);

Agora na lista tenho duas posições que guardam duas referências que apontam para o mesmo objeto… qualquer uma delas que eu quiser usar para mudar o estado do objeto é valido…

Object obj3 = lista.get(0);
obj3.fazAlgo();

Se pegar a outra posição, o objeto foi alterado…

Object obj4 = lista.get(1);

Uma forma de saber se as referências apontam para o mesmo objeto é simplesmente usando um if…

Object obj1 = lista.get(0);
Object obj2 = lista.get(1);

if (obj1 == obj2) {
    System.out.println("Referências (ponteiros) apontam para o mesmo objeto na memória!");
}

Já adianto, todo esse recurso você só consegue atingir com tipos Object, para tipos primitivos como int, float, double, boolean etc, precisa fazer um wrapper (a grosso modo transformar) em objetos usando classes como Integer, Float, Double, Boolean respectivamente…

Muitooo Origada pela resposta!!

È mais ou menos isso, porém eu estava pensando msm na ideia de um apontador permanente, em que nesta posição de memoria dois objetos apontem para ela. Por exemplo, suposto que está rotina esteja em um FOR e seja uma rotina mais genérica, se eu atualizar a posição 0 , a posição 2 não será atualizado, a não ser que seja de forma manual.
Basicamente, eu tenho um projeto em que recebo dois valores e atualizo num arrayList.
Por exemplo: tenho o arrayList :A-B-C, recebo os valores A e C , então meu arraylist deverá ficar: A/C-B-A/C.Ou seja A é a posição 0 do meu array e atualizo com A/C e C é a posição 2 e atualizo para A/C.De forma manual ficará muito custosa essa implementação pensando em centenas de dados.

acho q confundi tudo :smile: kkkkkkkkkkkkkk

Muito Obrigada!!!

È essa a ideia, vc poderia me dar um exemplo de como fazer essa transformação(wrapper), por favor?
Uma pergunta: essa transformação seria inviável se eu receber centenas de dados dentro do ArrayList? Por que no caso eu teria que transformar todos.

Obrigada!!

Entendi.
No caso, a referência seria sempre entre as mesmas posições ou faria isso por comparação?

Um exemplo usando inteiros…

List<Integer> lista = new ArrayList<>();

Integer int1 = 10; //new Integer(10);
Integer int2 = 20;
Integer int3 = int1;
Integer int4 = 40;
Integer int5 = 50;

lista.add(int2);
lista.add(int3);
lista.add(int4);
lista.add(int5);

for (Integer intN : lista) {
    if (int1 == intN) {
        System.out.printf("%d e %d apontam para o mesmo objeto\n", int1, intN);
    } else {
        System.out.printf("%d e %d não apontam para o mesmo objeto\n", int1, intN);
    }
}

Quanto a performance, dependendo do tamanho da lista (milhares talvez) possa ser afetada sim, mas creio que centenas não…

Wrapper te dá métodos estáticos bem uteis na hora de manipular variáveis. Ele meio que transforma um primitivo em um objeto.

ao invés de declarar assim:

int valor;

declare assim;

Integer valor;

Então ai que ta o problema , eu só vou saber q A é apontado pra C , por exemplo,quando minha rotina me retornar esses valores.Não usaria comparação, se mudei A, a posição C tbm vai mudar.
Tinha pensando em fazer lista ligada para isso, mas seria como reinventar a roda em java.

Obrigada!!
Tem uma parte que eu não tenho ctz se entendi.No caso depois da comparação (int1==intN) farei q intN receba o msm conteúdo de int1 , ou isso já acontece sem eu manipula-los diretamente?

Obrigada novamente!

São apenas essas 2 posições que são ligadas? Sempre são as mesmas?
Caso sim, pode fazer um método que execute toda vez que vc fizer alguma alteração na lista.

Isso já aconteceu nessa linha…

Integer int3 = int1;

Obrigada!!
acabei de mudar aqui!!

Como disse, no caso de atualização de um elemento, deve ser tratado um método para cuidar da atualização.
A referencia que o @LostSoldier LostSoldier passou só funciona na criação da lista. Não atualiza depois.

Infelizmente não, eu posso ter vários posições ligadas nestas.

Entendi… vou ter q dar uma pensada nisso kkkkkkkkk Pensei que como os dois estivessem na msm referencia , seriam basicamente o msm objeto.

Crie uma lista como o @LostSoldier disse, assumindo que na hora da criação vc saiba quais posições estarão ligadas.
Depois crie um método que percorra toda a lista verificando quais entradas são iguais e trate a atualização. (FOR aninhado)

Certo, eu tava pensando em realizar essa “designação” a cada vez minha rotina me trazer estes dois valores, a final, não há como na hora da criação, eu saber quais posições estarão ligadas.

Certo.
O importante é o método que vai comparar as posições, e caso true, sete o valor atualizado.

Cuidado para não confundir conceitos, lista ligada não tem nada haver com elementos/referencias iguais em uma lista… lista ligada é uma forma de implementação da lista, e não de seus elementos/posições…

Essa apostila é show para entender legal o significado…