2011-11-01 6 views
80

Quiero saber si es seguro/recomendable para convertir de ArrayList a matriz? Tengo un archivo de texto con cada línea una cadena:De lista de archivos a matriz

1236 
1233 
4566 
4568 
.... 

quiero leerlos en lista de arreglo y luego convertirlo a la matriz. ¿Es aconsejable/legal hacer eso?

gracias

+7

Usted * puede *, pero no nos ha dado suficiente información para decirle si es una buena idea o no. –

+5

ArrayLists están bien. La única razón por la que puedo ver para convertir a una matriz es si necesita llamar a un método que lo requiera. –

Respuesta

162

it is safe to convert an ArrayList to an Array. Si es una buena idea depende de su uso previsto. ¿Necesita las operaciones que ArrayList proporciona? Si es así, mantenlo como ArrayList. De lo contrario, conviértase!

ArrayList<Integer> foo = new ArrayList<Integer>(); 
foo.add(1); 
foo.add(1); 
foo.add(2); 
foo.add(3); 
foo.add(5); 
Integer[] bar = foo.toArray(new Integer[foo.size()]); 
System.out.println("bar.length = " + bar.length); 

salidas

bar.length = 5 
+0

¿Qué sucede si ArrayList está vacío? – ThanosFisherman

+22

Luego está vacío. – IMustBeSomeone

4
ArrayList<String> myArrayList = new ArrayList<String>(); 
... 
String[] myArray = myArrayList.toArray(new String[0]); 

Ya se trate de una "buena idea" sería realmente depende de su caso de uso.

+0

gracias, solo curiosidad por saber: no necesito declarar el tamaño de la matriz? –

+0

JavaDocs es tu amigo. Si la matriz que se pasa es demasiado pequeña, se devuelve una nueva matriz. La otra versión del método que no toma args devuelve una matriz de 'Objeto' –

2

v suponiendo que es un ArrayList:

String[] x = (String[]) v.toArray(new String[0]); 
1
ArrayList<String> a = new ArrayList<String>(); 
a.add("test"); 
@SuppressWarnings("unused") 
String[] array = (String[]) a.toArray(); 

Depende de lo que quiere lograr, si es necesario manipular la matriz después que costaría más esfuerzo que el mantenimiento de la cadena en el ArrayList. También tiene acceso aleatorio con un ArrayList por list.get(index);

57

Esta es la mejor manera (en mi humilde opinión).

List<String> myArrayList = new ArrayList<String>(); 
//..... 
String[] myArray = myArrayList.toArray(new String[myArrayList.size()]); 

Este código funciona también:

String[] myArray = myArrayList.toArray(new String[0]); 

Pero es menos eficaz: la matriz de cadenas se crea dos veces: se crea por primera vez matriz de longitud cero, entonces se crea la matriz de tamaño real, lleno y volvió. Por lo tanto, si conoce el tamaño necesario (desde list.size()), debe crear una matriz lo suficientemente grande como para poner todos los elementos. En este caso, no se vuelve a asignar.

+1

buena explicación de la diferencia entre' new String [0] 'y' new String [size] ' – gamliela

0

La interfaz Colección incluye el método toArray() para convertir una nueva colección en una matriz. Hay dos formas de este método. La versión sin argumento devolverá los elementos de la colección en una matriz de objetos: public Object [] toArray(). La matriz devuelta no puede convertir a ningún otro tipo de datos. Esta es la versión más simple. La segunda versión requiere que pase el tipo de datos de la matriz que desea devolver: public Object [] toArray (Tipo de objeto []).

public static void main(String[] args) { 
      List<String> l=new ArrayList<String>(); 
      l.add("A"); 
      l.add("B"); 
      l.add("C"); 
      Object arr[]=l.toArray(); 
      for(Object a:arr) 
      { 
       String str=(String)a; 
       System.out.println(str); 
      } 
     } 

de remisión se refieren este enlace http://techno-terminal.blogspot.in/2015/11/how-to-obtain-array-from-arraylist.html

0

Un enfoque sería añadir el segundo bucle de impresión en el que se está haciendo dentro del primer bucle. De esta manera:

static String[] SENTENCE; 

public static void main(String []args) throws Exception{ 

    Scanner sentence = new Scanner(new File("assets/blah.txt")); 
    ArrayList<String> sentenceList = new ArrayList<String>(); 

    while (sentence.hasNextLine()) 
    { 
     sentenceList.add(sentence.nextLine()); 
    } 

    sentence.close(); 

    String[] sentenceArray = sentenceList.toArray(new String[sentenceList.size()]); 
    // System.out.println(sentenceArray.length); 
    for (int r=0;r<sentenceArray.length;r++) 
    { 
     SENTENCE = sentenceArray[r].split("(?<=[.!?])\\s*"); //split sentences and store in array 

     for (int i=0;i<SENTENCE.length;i++) 
     { 
      System.out.println("Sentence " + (i+1) + ": " + SENTENCE[i]); 
     } 
    }  

}