Announcement

Collapse
No announcement yet.

Mehrere ArrayListen miteinander Vergleichen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mehrere ArrayListen miteinander Vergleichen

    Hallo,

    ich habe eine ArrayList, die mehrere ArrayListen unterschiedlicher Länge verwaltet. Wie kann man die Werte dieser ArrayListen miteinander vergleichen?
    Hier ein Beispiel für das was ich meine:
    Parent_ArrayList
    #
    #
    ####Child_ArrayList_1->element1->element2->element3
    #
    #
    ####Child_ArrayList_2->element1->....elementn
    #
    #
    ####Child_ArrayList_n->element1->element2->...->elementn

    Ich möchte nun zuerst ArrayList1 mit ArrayList2 vergleichen, und gleiche Elemente in ein neues temp_arrayList schreiben usw.

    Vielen Dank!

  • #2
    Na am einfachsten geht das wohl, wenn du die contains(Object elem) von ArrayList benutzt. Dabei musst du natürlich über die längere Liste iterieren.
    z.B. so:
    ArrayList al1 = ...;
    ArrayList al2 = ...;
    ArrayList alIterate; // the ArrayList to iterate
    ArrayList alCompare; // the ArrayList to compare
    ArrayList alTemp = new ArrayList(); // the ArrayList with the dublicates

    /* check, wheter the first or the second list is the longer one */
    if(al1.size() > al2.size()) {
    alIterate = al1;
    alCompare = al2;
    }
    else {
    alIterate = al2;
    alCompare = al1;
    }

    /* iterate over the longer one */
    for (int i = 0; i < alIterate.size(); i++){
    Object o = alIterate.get(i);
    if(alCompare.contains(o)) alTemp.add(o);
    }

    Wenn die Listen allerdings (aufsteigend) sortiert sind, kann man das natürlich auch effizienter lösen.
    int i = 0; // the index to iterate over the first array
    int j = 0; // the index to iterate over the second array
    for(; i < al1.size(){
    for(; j < al2.size(){
    if(al1.get(i).equals(al2.get(j))) {
    /* a dublicate was found, save it and move both pointers
    forward
    */
    alTemp.add(o);
    i++;
    j++;
    break;
    }
    if(al1.get(i).compare(al2.get(j)) < 0){
    /* the value in the first list is smaller then the one in
    the second list, move only the pointer of the first
    list forward
    */
    i++;
    break;
    }
    if(al1.get(i).compare(al2.get(j)) > 0){
    /* this test is not needed, but makes the example easier
    to read
    */
    /* the value in the second list is smaller than the one in
    the first list, move only the pointer of the second
    list forward
    */
    j++;
    }
    }
    }

    Sowohl equals als auch compare müssen natürlich entsprechend implementiert sein.

    Viel Spass noc

    Comment

    Working...
    X