2012-10-27 2 views

Répondre

21

Si vous voulez primitive tableau de type, vous pouvez utiliser la méthode Apache CommonsArrayUtils#toPrimitive pour obtenir primitive de tableau de tableau d'emballage: -

public static int[] toPrimitive(Integer[] array) 

Vous pouvez l'utiliser comme ceci: -

int[] arr = ArrayUtils.toPrimitive((Integer[])integerArrayList.toArray()); 

Ou, vous pouvez utiliser la version 1-arg de toArray méthode, qui prend un tableau et renvoie le tableau de ce type uniquement. De cette façon, vous n'aurez pas à coder .

List<Integer> myList = new ArrayList<Integer>(); 
Integer[] wrapperArr = myList.toArray(new Integer[myList.size()]); 

// If you want a `primitive` type array 
int[] arr = ArrayUtils.toPrimitive(wrapperArr); 

Cependant, si vous êtes Ok avec le tableau wrapper type(ce qui ne sera certainement pas de mal à vous), alors vous ne pas besoin faire cette dernière étape.


En outre, vous pouvez également créer un tableau primitive, sans avoir à créer ce type de Wrapper tableau intermédiaire. Pour cela, vous devrez écrire par loop: -

int[] arr = new int[myList.size()]; 

for(int i = 0; i < myList.size(); i++) { 
    if (myList.get(i) != null) { 
     arr[i] = myList.get(i); 
    } 
} 
+0

'Il fait le same'. Boucle sur le tableau et crée un nouveau tableau primitif. Et ajouter une autre bibliothèque pour une fonctionnalité aussi simple n'a pas de sens. –

+0

@AmitD. Au moins nous évite d'écrire cette boucle, pour faire le travail. –

5

Vous devrez parcourir et le copier.

int[] intArray = new int[integerArrayList.size()]; 
for (int i = 0; i < intArray.length; i++) { 
    intArray[i] = integerArrayList.get(i); 
} 
1

vous devriez utiliser la méthode toArray(T[] arr) de arraylist au lieu de toArray() de arrayList sans args. se référer à cette signature de méthode here.

le faire comme ci-dessous:

ArrayList<Integer> al = new ArrayList<>(); 
     al.add(2); 
     al.add(3); 
     Integer[] arr = al.toArray(new Integer[al.size()]); 
     System.out.println(arr.length);//returns 2 
+7

Ceci est incorrect car il cherche à créer un tableau int primitif, pas un autre tableau d'entier. – JamesB

2

Vous n'avez pas besoin de la boucle, et vous n'avez pas besoin transtypé int. Il suffit de changer la déclaration de int à Integer. L'autre code utilisera l'unboxing automatique aux éléments int si nécessaire.

Regardez autoboxing

// List adapter for primitive int array 
public static List<Integer> asList(final int[] a) { 
    return new AbstractList<Integer>() { 
     public Integer get(int i) { return a[i]; } 
     // Throws NullPointerException if val == null 
     public Integer set(int i, Integer val) { 
      Integer oldVal = a[i]; 
      a[i] = val; 
      return oldVal; 
     } 
     public int size() { return a.length; } 
    }; 

}

Questions connexes