es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Diferencias entre list.sublist() y stream.limit(): – list.sublist(): La función list.sublist() devuelve una sublista de una lista dada. Recibe dos parámetros: el índice inicial y el índice final (no inclusivo). Esta función devuelve una nueva lista que contiene los elementos desde el índice inicial hasta el índice final de la lista original. – stream.limit(): Por otro lado, la función stream.limit() se utiliza en programación funcional para limitar una secuencia de elementos. Recibe un parámetro numérico que representa el límite de elementos que queremos obtener de la secuencia. Devuelve una nueva secuencia que contiene como máximo la cantidad de elementos especificada. En resumen, la función list.sublist() se utiliza para obtener una sublista de una lista original, mientras que la función stream.limit() se utiliza para limitar la cantidad de elementos en una secuencia.

Tengo dos versiones de código que truncan una lista existente:

versión 1:

List<string> myList = User.getAllNames();
myList = myList.stream().sorted(sortByName).limit(5).collect(Collectors.toList());

versión 2:

List<string> myList = User.getAllNames();
myList.sort(sortByName);
myList = myList.subList(0, 5 - 1);

versión 3:

List<string> myList = User.getAllNames();
myList = new ArrayList<string>(myList.subList(0, 5 - 1));

Puede asumir que ningún otro objeto tiene una referencia a los elementos recortados. Ambas versiones truncan myList al reasignarla. Como la versión 2 utiliza solo subList, que tiene como base su lista de origen, tengo dudas de si la versión 2 también elimina totalmente los elementos recortados del montón de Java (después de la recolección de basura), como lo hace la versión 1.

Lo principal que necesito saber es si la versión 2 también elimina totalmente los elementos recortados del montón de Java (después de la recolección de basura), como lo hace la versión 1.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Basándose en el código proporcionado, tanto la versión 1 como la versión 2 eliminan los elementos recortados de la lista y, por lo tanto, de la memoria Java después de la recolección de basura. En la versión 1, se crea una nueva Lista utilizando el método “collect” y se asigna a “myList”, por lo tanto, la lista antigua se descarta y sus elementos son elegibles para la recolección de basura. En la versión 2, el método “subList” devuelve una vista de la lista original, pero la asignación a “myList” crea un nuevo objeto Lista que contiene solo los elementos en la sublista. La lista antigua y sus elementos son elegibles para la recolección de basura después de que ya no sean referenciados. La versión 3 también crea un nuevo objeto Lista y elimina los elementos recortados de la memoria Java, pero innecesariamente crea un ArrayList más grande con una capacidad igual a la longitud de la sublista más uno, lo que puede llevar a ineficiencias. En general, las tres versiones logran el mismo resultado de truncar la lista, pero la versión 2 puede ser más eficiente en cuanto al uso de memoria.

Comments are closed.