Wie kann ich 2 ArrayList miteinander vergleichen?
Ich habe 2 ArrayList mit der ich die spieler die tot sind und die die leben zähle.
(siehe Bild)
wie kann ich die vergleichen?

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
()
"length" wird synonym für "size" benutzt. Es macht keinen Unterschied.
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).
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.
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.
Noch einmal: Ein Array ist keine ArrayList. Daher gibt es die Methode oder Eigenschaft length bei seinen Objekten auch nicht.
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)
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;
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.
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
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.
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()