Método toArray de Lista con el tipo de tiempo de ejecución de los objetos en la Lista

Al usar javax.mail.Message#setRecipeints, noté algo por primera vez y quería saber más al respecto.

Este es mi código:

List<InternetAddress> ccRecipients = new ArrayList<InternetAddress>();
// have a valid and working 
// method that fills the list with the data (InternetAddress objects)
message.setRecipients(
         RecipientType.CC, ccRecipients.toArray(new InternetAddress[0]));

Aquí no entiendo por qué necesitamos crear una nueva InternetAddressmatriz y pasar el elemento al índice 0 en el toArraymétodo.

¿Alguien puede explicar por qué requerimos que esto se haga?

Creo que tiene algo que ver con este toArraymétodo especial .

Leí lo siguiente de los documentos de la API pero no obtuve la última parte (en negrita):

Al igual que el método toArray (), este método actúa como puente entre las API basadas en matrices y las basadas en colecciones. Además, este método permite un control preciso sobre el tipo de tiempo de ejecución de la matriz de salida y, bajo ciertas circunstancias, puede usarse para ahorrar costos de asignación .

¿Cómo ahorra costos de asignación?

Respuesta 1

El argumento del método es una matriz que puede recibir el contenido de la Colección, si es lo suficientemente grande. Creo que las circunstancias serían si ya tuviera una matriz asignada que fuera lo suficientemente grande como para contener la colección, esa misma matriz podría usarse en lugar de asignar una nueva.

Tenga en cuenta que su código está pasando una matriz de longitud 0: esa matriz se devolverá solo cuando la colección esté vacía. Si hay algún elemento en la Lista, se asignará y devolverá una nueva matriz.

Respuesta: 2

Para usarlo para ahorrar costos de asignación, el argumento de la matriz debe ser al menos tan largo como la Lista. En ese caso, los datos se copian en la matriz a la que hace referencia el argumento. Suponga que la Lista siempre tiene el mismo tamaño, siempre desea que sea del mismo tipo de elemento y solo necesita una matriz a la vez. Puede reutilizar la misma matriz, en lugar de crear una nueva cada vez que se llama a Array.

En la práctica, es más habitual crear una nueva matriz cada vez, pero si usa el tamaño de Lista en lugar de 0, toArray podrá usarlo.

Respuesta: 3

class Main {public static void main (String [] args) {Window h = nueva ventana (100,100); }} class Window {marco JFrame privado; Ventana pública (int ...

En aras de que todos entiendan mi problema, he creado un programa GUI simple que muestra mi problema. Primero pondré los códigos para que los analices. Y luego, mira el video a continuación para ver ...

El siguiente programa (prog1) arroja el error OutOfMemoryError. Con razón Pero si agrego sysout debajo de la línea 5 (prog2), no arrojará un error. ¿Alguna razón para este extraño comportamiento? prog1: public static void main (...

¿Cómo se puede hacer esto en iText? Tengo un PDF con una firma de un cliente. Necesito agregar una respuesta ocsp a los atributos sin firmar. Sé cómo cambiar la firma en sí usando org.bouncycastle ...