Como faço para comparar se o conteúdo de uma ArrayList é igual a outra ArrayList (no meu caso é a mesma ArrayList só que em vetores diferentes, algo como if(S[x].toArray == S[x+1].toArray), pra verificar todo o conteúdo dela e ver se esta igual … Só que se por exemplo na primeira array tiver “2” e “4” e na segunda tiver “4” e “2” tem que dar como igual, oque eu quero é que o conteúdo seja o mesmo, não precisa ser a mesma ordem
Modo braço, é um algoritmo de exaustão ( que na maioria das vezes é ineficiente, mas, funcional ) com um ajuste para quando não achar a primeira ocorrência já cai fora dos duas estruturas de repetição. Há pacotes para fazer isso, mas, se o intuito é aprender tá ai um código a ser estudado e modificado se assim achar solução a melhorar.
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
int[] first = {5,2,3,1};
int[] other = {3,2,1,5};
boolean status = false;
if (first.length == other.length)
{
for(int i = 0; i < first.length; i++)
{
status = false;
for(int j = 0; j < other.length; j++)
{
if (other[j] == first[i])
{
status = true;
break;
}
}
if (!status)
{
break;
}
}
}
if (status)
{
System.out.println("Há correspondencia nos dois arrays");
}
else
{
System.out.println("Não Há correspondencia nos dois arrays");
}
}
}
Nesse caso é com array simples,com ArrayList tem no site, a única coisa que você precisa fazer é ordernar os dois na mesma lógica.
ArrayList<Integer> first = new ArrayList();
first.add(1);
first.add(2);
first.add(3);
ArrayList<Integer> other = new ArrayList();
other.add(1);
other.add(2);
other.add(3);
System.out.println(first.equals(other)); // retornar verdade
ArrayList<Integer> first = new ArrayList();
first.add(1);]
first.add(2);
first.add(3);
ArrayList<Integer> other = new ArrayList();
other.add(1);
other.add(3);
other.add(2);
System.out.println(first.equals(other)); // retornar falso
Maneira com Ordenação:
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
ArrayList<Integer> first = new ArrayList();
first.add(3);
first.add(1);
first.add(2);
ArrayList<Integer> other = new ArrayList();
other.add(2);
other.add(3);
other.add(1);
Collections.sort(first); // ordernando ...
Collections.sort(other); // ordernando ...
System.out.println(first.equals(other));
}
}
Pode usar o método abaixo:
public static <T extends Comparable<? super T>> boolean areEquals(List<T> primeira, List<T> segunda) {
if (primeira == null && segunda == null) {
return true;
}
if (primeira == null || segunda == null) {
return false;
}
if (primeira.size() != segunda.size()) {
return false;
}
primeira = new ArrayList<T>(primeira);
segunda = new ArrayList<T>(segunda);
Collections.sort(primeira);
Collections.sort(segunda);
return primeira.equals(segunda);
}
Aí basta comparar assim por exemplo:
boolean iguais = areEquals(minhaLista1, minhaLista2);
Caso você precise que a quantidade do mesmo elemento também não importe, pode fazer algo assim:
List<Integer> minhaLista1 = Arrays.asList(3, 3, 3, 3, 4); // lista com 3, 3, 3, 3 e 4
List<Integer> minhaLista2 = Arrays.asList(4, 4, 4, 4, 3); // lista com 4, 4, 4, 4 e 3
boolean saoIguais = new HashSet<>(minhaLista1).equals(new HashSet<>(minhaLista2));
System.out.println("Resultado: " + saoIguais); // true
[3, 3, 3, 4] e [4, 4, 4, 3], por exemplo, vão ser iguais.
Entendi, dessa forma eu conseguiria, só tenho uma duvida quanto a primeira linha, no caso do:
Oque seria esse <T extends Comparable<? super T>> ? Que depois acabou usando ele como um tipo de objeto para a lista…
Desculpa se estiver sendo chato com essa pergunta, é que eu não quero pegar um código e usar no meu código sem entender como ele funciona…
O tipo genérico das listas passadas por parâmetro.
Pra funcionar com List
de qualquer tipo de dado que implemente Comparable
.
Tipei dessa forma pra ficar igual à assinatura do método Collections.sort
.
Se quiser, pode tirar a declaração do T e usar parâmetros do tipo List<Integer>
, Mas aí o método só vai funcionar pra verificar List<Integer>
.
Entendi, obrigado pela explicação
![](https://www.guj.com.br/letter_avatar_proxy/v3/letter/w/7ab992/40.png)
Entendi, dessa forma eu conseguiria, só tenho uma duvida quanto a primeira linha, no caso do:
Na verdade você não entendeu a solução dele em nenhum momento, precisa parar e estudar pra entender isso mais relevante. Apesar que eu acho que você também não entendeu nenhum das soluções e você tem razão em indagar para não copiar e colar.