array - java list




Konvertieren eines Arrays in eine ArrayList (4)

Wenn Sie können, Guava verwenden

Es lohnt sich, auf den Guava-Weg hinzuweisen, der diese Spielereien wesentlich vereinfacht:

Verwendung

Für eine unveränderbare Liste

Verwenden Sie die ImmutableList Klasse und ihre Factory-Methoden of() und copyOf() (Elemente dürfen nicht null sein) :

List<String> il = ImmutableList.of("string", "elements");  // from varargs
List<String> il = ImmutableList.copyOf(aStringArray);      // from array

Für eine veränderbare Liste

Verwenden Sie die Lists Klasse und die Factory-Methoden newArrayList() :

List<String> l1 = Lists.newArrayList(anotherListOrCollection);   // from collection
List<String> l2 = Lists.newArrayList(aStringArray);              // from array
List<String> l3 = Lists.newArrayList("or", "string", elements"); // from varargs

Beachten Sie auch die ähnlichen Methoden für andere Datenstrukturen in anderen Klassen, beispielsweise in Sets .

Warum Guava?

Die Hauptattraktion könnte darin bestehen, das Durcheinander aufgrund von Generika für die Typensicherheit zu reduzieren, da die Verwendung der Guava- Fabrikmethoden es erlaubt, die Typen die meiste Zeit abzuleiten. Dieses Argument enthält jedoch weniger Wasser, seit Java 7 mit dem neuen Diamantenoperator eingetroffen ist.

Aber es ist nicht der einzige Grund (und Java 7 ist noch nicht überall): Die Kurzschriftsyntax ist auch sehr praktisch, und die Methoden-Initialisierer, wie oben gezeigt, erlauben es, ausdrucksstarkeren Code zu schreiben. Sie machen in einem Guava-Aufruf, was bei den aktuellen Java-Sammlungen 2 annimmt.

Wenn du nicht kannst ...

Für eine unveränderbare Liste

Verwenden Sie die JDK- Arrays.asList() und Collections.unmodifiableList() :

List<String> l1 = Arrays.asList(anArrayOfElements);
List<String> l2 = Arrays.asList("element1", "element2");

Beachten Sie, dass:

  • Der zurückgegebene Typ für asList() sagt ArrayList , aber es ist nicht java.util.ArrayList . Es ist ein innerer Typ, der ArrayList imitiert, aber tatsächlich direkt auf das vorherige Array verweist und einige Modifikationen verbietet.
  • unmodifiableList() sperrt außerdem Änderungen an der zurückgegebenen Ansicht der ursprünglichen Liste.

Siehe den nächsten Schritt, wenn Sie eine veränderbare Liste benötigen.

Für eine änderbare Liste

Wie oben, aber mit einer tatsächlichen java.util.ArrayList umhüllt:

List<String> l1  = new ArrayList<String>(Arrays.asList(array));    // Java 1.5 to 1.6
List<String> l1b = new ArrayList<>(Arrays.asList(array));          // Java 1.7+
List<String> l2  = new ArrayList<String>(Arrays.asList("a", "b")); // Java 1.5 to 1.6
List<String> l2b = new ArrayList<>(Arrays.asList("a", "b"));       // Java 1.7+

Für pädagogische Zwecke: Der gute alte manuelle Weg

// for Java 1.5+
static <T> List<T> arrayToList(final T[] array) {
  final List<T> l = new ArrayList<T>(array.length);

  for (final T s : array) {
    l.add(s);
  }
  return (l);
}

// for Java < 1.5 (no generics, no compile-time type-safety, boo!)
static List arrayToList(final Object[] array) {
  final List l = new ArrayList(array.length);

  for (int i = 0; i < array.length; i++) {
    l.add(array[i]);
  }
  return (l);
}

Diese Frage hat hier bereits eine Antwort:

Ich habe große Schwierigkeiten, ein Array in eine ArrayList in Java zu verwandeln. Das ist mein Array jetzt:

Card[] hand = new Card[2];

"Hand" enthält eine Reihe von "Karten". Wie würde das als ArrayList aussehen?


Als ArrayList wäre diese Zeile

import java.util.ArrayList;
...
ArrayList<Card> hand = new ArrayList<Card>();

Um die ArrayList , müssen Sie das tun

hand.get(i); //gets the element at position i 
hand.add(obj); //adds the obj to the end of the list
hand.remove(i); //removes the element at position i
hand.add(i, obj); //adds the obj at the specified index
hand.set(i, obj); //overwrites the object at i with the new obj

Lesen Sie auch diese http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html


Dies wird Ihnen eine Liste geben.

List<Card> cardsList = Arrays.asList(hand);

Wenn Sie eine Arraylist wollen, können Sie tun

ArrayList<Card> cardsList = new ArrayList<Card>(Arrays.asList(hand));

List<Card> list = new ArrayList<Card>(Arrays.asList(hand));




blackjack