Ich habe eine ArrayList
die ich vollständig als String ausgeben möchte. Im Wesentlichen möchte ich sie in der Reihenfolge ausgeben, in der die toString
der einzelnen Elemente durch Tabulatoren getrennt. Gibt es eine schnelle Möglichkeit, dies zu tun? Sie könnten Schleife durch sie (oder entfernen Sie jedes Element) und verketten es zu einem String, aber ich denke, dies wird sehr langsam sein.
Antworten
Zu viele Anzeigen?Dies ist ein ziemlich altes Thema mittlerweile und Apache Commons sind jetzt mit einem StringBuilder intern: http://commons.apache.org/lang/api/src-html/org/apache/commons/lang/StringUtils.html#line.3045
Dies wird bekanntlich die Leistung verbessern, aber wenn die Leistung entscheidend ist, könnte die verwendete Methode etwas ineffizient sein. Während die Schnittstelle flexibel ist und ein konsistentes Verhalten bei verschiedenen Collection-Typen ermöglicht, ist sie bei Lists, dem Collection-Typ, um den es in der ursprünglichen Frage ging, etwas ineffizient.
Ich begründe dies damit, dass uns ein gewisser Overhead entsteht, den wir vermeiden würden, wenn wir die Elemente einfach in einer herkömmlichen for-Schleife durchlaufen würden. Stattdessen passieren hinter den Kulissen einige zusätzliche Dinge, wie die Überprüfung auf gleichzeitige Änderungen, Methodenaufrufe usw. Die erweiterte for-Schleife führt andererseits zu demselben Overhead, da der Iterator für das Iterable-Objekt (die Liste) verwendet wird.
Wie wäre es mit dieser Funktion:
public static String toString(final Collection<?> collection) {
final StringBuilder sb = new StringBuilder("{");
boolean isFirst = true;
for (final Object object : collection) {
if (!isFirst)
sb.append(',');
else
isFirst = false;
sb.append(object);
}
sb.append('}');
return sb.toString();
}
es funktioniert für jede Art von Sammlung...
- See previous answers
- Weitere Antworten anzeigen