Comparação entre ArrayLists

12 respostas
jeias

Olá Galera,

Estou com uma dúvida em relação a comparar ArrayList com outro ArrayList. O objetivo é se uma posição do ArrayList for igual a qualquer uma do outro, esse ArrayList tem que ser excluido.
ArrayList<String> a = new ArrayList<String>();
		ArrayList<String> b = new ArrayList<String>();
		
		a.add("1");
		a.add("2");
		a.add("3");
		a.add("4");
		a.add("5");
		a.add("6");
		
		b.add("11");
		b.add("12");
		b.add("6");
		b.add("9");
		b.add("8");
		
		
		for(String c: a){
			if(c.equals(b)){
				b.remove(c);
				
			}

12 Respostas

ViniGodoy

Não basta:

a.removeAll(b);

?

EltonJr

Na verdade, você precisa colocar um FOR dentro de outro, para que os elementos dos dois Arrays sejam varridos.

for(String c : a){ for(String d : b){ if(c.equals(d)){ b.remove(d); }//fecha if }//fecha for }//fecha for

EltonJr

… Ou dá pra fazer o que o ViniGodoy disse
hahahha

lucasportela

Equivoco: não seria o retainAll() ?

Realmenteo o vinny falou certo, pensei que ele queria remover os diferentes…

jeias

ViniGodoy:
Não basta:

a.removeAll(b);

?

ArrayList<String> a = new ArrayList<String>();
		ArrayList<String> b = new ArrayList<String>();
		
		a.add("1");
		a.add("2");
		a.add("3");
		a.add("4");
		a.add("5");
		a.add("6");
		
		b.add("11");
		b.add("12");
		b.add("6");
		b.add("9");
		b.add("8");
		
		
		for(String c: a){
			if(c.equals(b)){
				a.removeAll(b);
				
			}
			
		for(String d: a){
			System.out.println(d);
		}
		
		for(String e: b){
			System.out.println("b: "+e);
		}
		
	}

Com esse código a saida foi:
1
2
3
4
5
6
b: 11
b: 12
b: 6
b: 9
b: 8

A intenção que se tiver alguma item de a repetido em b, b seja exluido assim sendo null.

lucasportela

hauahuaha o cara não entendeu…

O que o Vinny quis dizer é que não precisa fazer a iteração e nem comparação

ArrayList<String> b = new ArrayList<String>();  
          
        a.add("1");  
        a.add("2");  
        a.add("3");  
        a.add("4");  
        a.add("5");  
        a.add("6");  
          
        b.add("11");  
        b.add("12");  
        b.add("6");  
        b.add("9");  
        b.add("8"); 

        a.removeAll(b);
jeias
lucasportela:
hauahuaha o cara não entendeu...

O que o Vinny quis dizer é que não precisa fazer a iteração e nem comparação

ArrayList<String> b = new ArrayList<String>();  
          
        a.add("1");  
        a.add("2");  
        a.add("3");  
        a.add("4");  
        a.add("5");  
        a.add("6");  
          
        b.add("11");  
        b.add("12");  
        b.add("6");  
        b.add("9");  
        b.add("8"); 

        a.removeAll(b);

A intendo, perdão pela desatenção ahauhauhauahuaha

Obrigado pela ajuda. :)

ViniGodoy

Você quer que o b inteiro seja excluído, ou só que o item repetido seja excluído? Se for o último caso, seria:

b.removeAll(a);

Se for para B inteiro ser excluído, o código seria:

boolean contemEmB = false; for (String str : a) { if (b.contains(a)) { contemEmB = true; break; } } if (contemEmB) b.clear();

ViniGodoy

Esse código dispara ConcurrentModificationException. Você não pode alterar um list enquanto itera por ele. Para excluir enquanto itera, você precisa usar o iterator diretamente.

jeias

ViniGodoy:
Você quer que o b inteiro seja excluído, ou só que o item repetido seja excluído? Se for o último caso, seria:

b.removeAll(a);

Se for para B inteiro ser excluído, o código seria:

boolean contemEmB = false; for (String str : a) { if (b.contains(a)) { contemEmB = true; break; } } if (contemEmB) b.clear();

Vini, minha intenção era excluir o ArrayList inteiro, sendo sua segunda opção.
A minha procura era exatemente esse código: “b.clear();”
Só que há uma outra dúvida: Como saber se ele foi excluido? pensei que era comprando ele a null:“if (b == null)”, mais deu errado aqui.
(Desculpe o trabalho, sou novo no assunto)

lucasportela

Para verificar se está vázio:

if(b.isEmpty())

Para verificar se não foi instânciado:

if(b == null)
jeias

lucasportela:
Para verificar se está vázio:

if(b.isEmpty())

Para verificar se não foi instânciado:

if(b == null)

Era isso mesmo que queria.
Muito obrigado a você e a todos que me ajudaram.

Criado 16 de agosto de 2011
Ultima resposta 16 de ago. de 2011
Respostas 12
Participantes 4