Wie kann ich 2 ArrayList miteinander vergleichen?

Die ArrayList von mir - (Minecraft, programmieren, Java)

5 Antworten

Zum vergleichen zweier ArrayLists sind an sich schon ausreichende Beispiele gegeben, siehe Antwort von Regex:

  • Vergleich über Länge (Wird nur in deinem Falle nicht viel bringen, wenn du zwischen toten und lebenden Spielern unterscheiden willst
  • Durchlaufen einer ArrayList, und arbeiten mit contains:
for (Player deadPlayer : dead) {
    if (online.contains(deadPlayer) {
            ...
    }
}

Unter der Verwendung von Java 8 könntest du zur Ermittlung eines toten Spielers, (sofern "tot" eine Eigenschaft des Spielers ist) auch einen Stream nutzen:

List<Player> deadPlayer = list.stream().filter((Player t) -> t.isDead()).collect(Collectors.toList());

Zuerst einmal kommt es darauf an, worauf es dir beim Vergleich ankommt.

Wenn es dir reicht, die Anzahl an Elementen zu vergleichen, dann nutze die Methode size.

Wenn du prüfen möchtest, ob beide Listen die gleichen Elemente enthalten, dann iteriere mit 1-2 Schleifen über diese und vergleiche die Werte. Gegebenenfalls prüfst / filterst du zuvor bezügl. möglicher Duplikate oder entfernst während der Iteration die Paare von Matches.

Willst Du nur die Anzahl der Elemente in einem Array auswerten oder die einzelnen Elemente selbst miteinander vergleichen?

Ersteres geht mit

myArray.length()
regex9  16.05.2017, 01:57

Konzept ist richtig, nur die Methode in diesem Kontext falsch, da es sich um Listen handelt. size wäre die Methode der Wahl: http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#size()

0
MarkusGenervt  16.05.2017, 02:03
@regex9

"length" wird synonym für "size" benutzt. Es macht keinen Unterschied.

0
MarkusGenervt  16.05.2017, 02:22
@MarkusGenervt

PS: Sorry, ich penne schon:

"size" ist die Byte-Größe. Daher kann bei Strings "length" synonym für "size" genutzt werden, denn Stings sind Char-Arrays, also Byte-Arrays.

Um die Anzahl der Elemente eines beliebigen Arrays (int[], float[], string[]) zu erhalten, wird die "length"-Methode benutzt. Die "size"-Methode gibt aber immer noch die Anzahl der Bytes wieder, so entspricht z.B. "short[2].length" dem Wert 3, während "short[2].size" dem Wert 6 entspricht (3 x short à 2 Byte).

0
HHallo3 
Fragesteller
 16.05.2017, 07:07
@MarkusGenervt

Es get bir mir nicht mit lenght. ich habe es so versucht: if(this.plugin.online.size() == Bukkit.getOnlinePlayers().lenght -1) {

Dabei wird lenght aber rot unterstrichen.

0
MarkusGenervt  16.05.2017, 16:21
@HHallo3

donner211 hat Dir die Antwort schon gegeben. Das ist ein Syntax-Fehler aufgrund der Rechtschreibung.

Und dennoch wird Dein Vergleich nur dann funktionieren, wenn alle Elemente nur je ein Byte groß und ihre Anzahl je gleich ist.

Nimm einfach bei beiden Arrays "length" und dann klappt es auch.

0
regex9  16.05.2017, 21:08
@MarkusGenervt

Noch einmal: Ein Array ist keine ArrayList. Daher gibt es die Methode oder Eigenschaft length bei seinen Objekten auch nicht.

0
MarkusGenervt  16.05.2017, 22:45
@regex9 FUUUUU…!!!

Das habe ich glatt überlesen … und das gleich zweimal … (@.@)

Mit "pennen" kann man das nicht mehr entschuldigen. Da war ich wohl schon im Koma. Ich brauch echt Urlaub … O﹏o

mea culpa, mea culpa, mea maxima culpa

DANKE, regex9, für Deine Hartnäckigkeit. x)

0
donner211  16.05.2017, 15:20

length nicht lenght

1

wieso machst du es nicht in einer liste und schreibst einfach deinen player um? und weißt immer die eigenschaft auf online auf einen boolean zu? ich hoffe du weißt was ich meine

was willst du denn vergleichen? ob die exakt gleich sind?
if (dead.get() == online.get()) 
bool sindGleich = true;

regex9  16.05.2017, 02:00

Dein Code ist falsch. In Java heißt der Datentyp boolean, die Methode get benötigt ein Argument und innerhalb eines if ohne gruppierten Körper kann keine Initialisierung stattfinden, zumal diese an der Stelle unnütz wäre.

0
RayVin  16.05.2017, 02:23
@regex9

Ist dir schonmal aufgefallen dass ich nicht die nötigen informationen dazu habe um den code korrekt zu schreiben? (die argumente und allein die methode "get" muss nicht unbedingt existieren) 
hätte ich aber noch hinschreiben sollen stimmt
und jeder programmierer den ich kenne weiß dass bool die kurzform für boolean ist aber guter einwand
die if schreibweise wäre korrekt, ich weiß nicht was du damit meinst.

danke für die korrektur

0
regex9  16.05.2017, 21:13
@RayVin

Doch. Oben in den Tags steht die Sprache und auch anhand der verwendeten Objekte im Bild ist ersichtlich, dass es sich um Java handelt. Mit einer Schleife um deinen Code hättest du auch das notwendige Argument von get (den Index) jeweils bedienen können. 😉

Die If-Schreibweise ist falsch, da eine Deklaration nach dem If nicht erlaubt ist, sofern der Konditionsrumpf nicht in geschweiften Klammern gruppiert wird.

0
RayVin  17.05.2017, 02:17
@regex9

ach das meintest du haha das sollten geschweifte klammern ums if sein :P

0