Ich kenn mich mit Java auch nicht so gut aus.
Ich auch nicht. Eben deshalb treffe ich keinerlei Aussagen über die Funktionalität, wenn ich es nicht ganz genau weiß.
Aber ich würde behaupten wenn man ein new macht und eine Liste übergibt, dass es die Werte übernhemen soll,
müssen die werte genauso kopiert werden wie mit einer Schleife und dabei muss auch die Größe bestimmt werden. Und dazu noch Speicher allokiert werden.
Tja, fragen wir doch mal 'Das Internet™'.
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
Sie nutzen also Arrays.copyOf().
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength));
return copy;
}
Nicht, dass ich da jetzt durchsehen würde, doch es sieht mir nach was ganz Anderes aus als einer For-Schleife.
System.arrayCopy(...) sagt leider nix darüber aus, wie es weiter geht. Das wird daher vermutlich Sache der RunTimeEnvironment sein. Und die ist per Definition besser und performanter als eine For-Schleife.
Klar der Garbage kollektor macht viel, aber braucht auch seine rechenzeit dafür...
Mir wäre eine manuelle Speicherverwaltung lieber. Gibt es unter Android nicht, also ist es auch egal.
Der Garbage Collector ist die einzige Möglichkeit der Speicherverwaltung, also müssen wir uns darauf verlassen, dass sie ordentlich funktioniert.
Ich kenn es auf jedenfall von c++, dass zuweisungen viel weniger Zeit brauchen als speicherallokation.
Eierst du in C++ mit Nachrichten an die Objekte herum? Soweit ich weiß greifst du da direkt auf die Member zu, was natürlich eine Ressourcenersparnis darstellt.
Da Java aber kein C++ ist, hilft dir das Wissen hier leider nicht weiter.
Aber ich kenn mich auch nicht so gut aus. Das gleiche Ergebnis kommt auf jedenfall raus
Natürlich. Du fingst mit Optimierungsvorschlägen an und ich meinte es gäbe nix zu optimieren.
Funktional ist beides und die new-Variante ist sprechender.
(Ja, ich weiß. Sprechender Code ist nicht ausschlaggebend für C++ Entwickler. +scnr+)