Come confrontare due arrayslist?

Ho due ArrayList . Ognuno è di 100000. Voglio confrontarli e contare gli elementi corrispondenti.

Ecco il mio codice:

  • L'anteprima della camera è in modalità ritratto ma l'image acquisita viene ruotata
  • Android - Ho bisogno di alcuni chiarimenti di frammenti vs attività e opinioni
  • Logcat è spesso fuori lavoro
  • Valore integer in TextView
  • Perché estendere una class di applicazioni?
  • Come fare la barra di progresso personalizzato Circle in Android
  •  for (int i = 0; i < mArryLst2.size(); i++) { if (ArryLst1.contains(mArryLst2.get(i))) { matchedPixels++; } } 

    Qui il process di confronto sta prendendo molto tempo.

    Come risolvere e ottimizzare questo problema.

  • Livelli di logging di Android
  • Ottieni l'authorization publish_action dopo aver ricevuto le autorizzazioni di lettura da Facebook
  • gestire il link di visualizzazione del text nella mia applicazione android
  • Android distriggers / distriggers il telefono
  • TypeArray in Android - Come memorizzare gli oggetti personalizzati in xml e recuperarli?
  • Centrare un button in un layout lineare
  • 8 Solutions collect form web for “Come confrontare due arrayslist?”

    utilizzare CollectionUtils.retainAll : Restituisce una raccolta contenente tutti gli elementi della raccolta1 che sono anche in collection2.

     ArrayList commonList = CollectionUtils.retainAll(list1,list2); 

    Dovresti trasformare la prima list in un HashSet. Le ricerche HashSet sono O (1) e le liste sono O (n). Questo rende l'integer algorithm O (n) piuttosto che O (n ^ 2)

     Set<Foo> set1 = new HashSet<Foo>(list1); for (Foo foo : list2) { if (set1.contains(foo)) { matchedPixels++; } } 

    si dovrebbe guardare questo collegamento Come confrontare due valori Arraylist in java? . fare una copia di una delle liste e quindi call rimuovi tutto per l'elenco contro l'altra list

     List result = new ArrayList(mArryLst2); result.removeAll(ArryLst1); 

    l'opzione migliore è mettere tutti gli elementi del vostro primo ArrayList in un set (consente solo elementi unici).
    Adesso, dal secondo ArrayList di ur, aggiungere each elemento al tuo Set, se l'elemento già esiste nel tuo set, allora restituirà false.

    se si dispone di 2 arraysLists ArrayList1 e ArrayList2 e si desidera che tutte le partite in un altro ArrayList Diff

     HashSet hs = new HashSet(); for(int i : ArrayList1) hs.add(i); for(int i : ArrayList2) { if(!hs.add(i)) Diff.add(i); } 

    sarà più veloce che penso

      Set set = new HashSet(); set.addAll(ArryLst1); for (int i = 0; i <mArryLst2.size(); i++) { if (set .contains(mArryLst2.get(i))) { matchedPixels++; } } 

    Ci sono un paio di modi per accelerare questo process (specialmente per grandi arrays) e semplificare il codice;

      // Quick Check to see if the two arraysLists have the same number of elements if (arrays1.size() != arrays2.size()) return false; // Optionally Sort the arrayss - avoid returning false if the elements are the same but // have been stored out of sequence Collections.sort(arrays1); Collections.sort(arrays2); if (arrays1.hashCode() == arrays2.hashCode()) { return true; } else { return false; } 

    Il modo migliore per eseguire l'operazione è l'override equals method e verificare se each object nell'elenco di arrays è uguale o no.

      public class CustomClass { String x; String a; String b; String c; long l; @Override public boolean equals(Object obj) { return (this.blindlyEquals(obj) && ((CustomClass) obj).blindlyEquals(this)); } protected boolean blindlyEquals(Object o) { if (!(o instanceof CustomClass)) return false; CustomClass p = (CustomClass)o; return (px == this.x && pa == this.a && pb == this.b && pc == this.c && pl == this.l); } } public class MainClass { ArrayList<CustomClass> member = new ArrayList<CustomClass>(); ArrayList<CustomClass> server; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub MainClass mainClass = new MainClass(); mainClass.server = mainClass.getServerList(); mainClass.member = mainClass.getLocalList(); if(mainClass.member.equals(mainClass.server)){ System.out.println("true"); //do the needfull, run a for loop to check which object is not equal }else{ System.out.println("false"); //do the needfull, run a for loop to check which object is not equal } } public ArrayList<CustomClass> getServerList(){ ArrayList<CustomClass> server = new ArrayList<CustomClass>(); CustomClass obj = new CustomClass(); CustomClass obj2 = new CustomClass(); obj.a = "ali"; obj.b = "ball"; obj.c = "cat"; obj.x = "xerox"; obj.l = 10; obj2.a = "ali"; obj2.b = "ball"; obj2.c = "cat"; obj2.x = "xerox"; obj2.l = 10; server.add(obj); server.add(obj2); return server; } public ArrayList<CustomClass> getLocalList(){ ArrayList<CustomClass> memberOne = new ArrayList<CustomClass>(); CustomClass obj = new CustomClass(); CustomClass obj2 = new CustomClass(); obj.a = "ali"; obj.b = "ball"; obj.c = "cat"; obj.x = "xerox"; obj.l = 10; obj2.a = "ali"; obj2.b = "ball"; obj2.c = "cat"; obj2.x = "xerox"; obj2.l = 10; memberOne.add(obj); memberOne.add(obj2); return memberOne; } } 

    Puoi usare

     ArrayList Listname = ListUtils.retainAll(list1,list2); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.