Preguntas Frecuentes sobre Java
Preguntas Frecuentes sobre Java
1. ¿Qué es Java?
Respuesta: La Java Virtual Machine (JVM) es un componente clave de la plataforma Java que
permite ejecutar aplicaciones Java. La JVM interpreta el bytecode Java (que es el código compilado)
y lo convierte en instrucciones que el sistema operativo puede entender. Este proceso es crucial
para la portabilidad de Java, ya que permite que el mismo bytecode se ejecute en diferentes
plataformas siempre que tengan la JVM correspondiente instalada. Además, la JVM se encarga de
la gestión de memoria y la ejecución de código, y proporciona un entorno seguro para las
aplicaciones Java.
Respuesta: El Java Development Kit (JDK) es un conjunto de herramientas de desarrollo que permite
a los programadores crear aplicaciones Java. Incluye el compilador, la JVM y varias bibliotecas y
herramientas necesarias para desarrollar aplicaciones. Por otro lado, el Java Runtime Environment
(JRE) es un conjunto de herramientas que permite ejecutar aplicaciones Java, incluyendo la JVM y
las bibliotecas estándar de Java, pero no incluye el compilador. En resumen, si deseas desarrollar
aplicaciones Java, necesitas el JDK; si solo deseas ejecutar aplicaciones Java, solo necesitas el
JRE.
Respuesta: Un constructor es un bloque de código que se llama al crear un objeto de una clase. Se
utiliza para inicializar los objetos y puede aceptar parámetros para establecer el estado del objeto en
el momento de su creación. En Java, un constructor tiene el mismo nombre que la clase y no tiene
un tipo de retorno. Si no se define un constructor, Java proporciona un constructor por defecto.
También hay constructores sobrecargados que permiten crear objetos de diferentes maneras.
Respuesta: Las excepciones son eventos inesperados que ocurren durante la ejecución de un
programa y que interrumpen el flujo normal de ejecución. Java maneja las excepciones a través de
su estructura de manejo de excepciones, que incluye try, catch, finally y throw.
● Try: Se utiliza para encapsular el código que puede lanzar una excepción.
● Catch: Captura la excepción lanzada en el bloque try y permite manejarla.
● Finally: Se ejecuta después de los bloques try y catch, independientemente de si se lanzó o
no una excepción. Se utiliza para liberar recursos.
● Throw: Se utiliza para lanzar explícitamente una excepción. Las excepciones se dividen en
dos categorías: comprobadas (checked) y no comprobadas (unchecked).
Respuesta: Una interfaz es un tipo de referencia en Java que puede contener constantes, firmas de
métodos, y métodos predeterminados. No puede contener implementación de métodos (hasta Java
8, donde se introdujeron los métodos predeterminados). Las interfaces se utilizan para definir un
contrato que las clases deben cumplir. Una clase puede implementar múltiples interfaces, lo que
permite la herencia múltiple. Esto es especialmente útil para crear código más flexible y
desacoplado, promoviendo el principio de programación por contrato.
Respuesta: La sobrecarga de métodos es una característica de Java que permite a una clase tener
más de un método con el mismo nombre pero con diferentes parámetros (número o tipo). Esto
permite que el mismo método pueda realizar diferentes tareas según los argumentos que recibe. La
sobrecarga mejora la legibilidad y la flexibilidad del código. Por ejemplo, podrías tener un método
sumar que suma dos enteros y otro que suma tres enteros.
Respuesta: La sobrescritura de métodos (overriding) ocurre cuando una subclase proporciona una
implementación específica de un método que ya está definido en su superclase. Esto permite a la
subclase personalizar el comportamiento de un método. La sobrescritura se realiza utilizando el
mismo nombre del método, el mismo tipo de retorno y los mismos parámetros que en la superclase.
La anotación @Override se utiliza para indicar que un método está sobrescribiendo un método de
la superclase.
Respuesta: Una clase abstracta es una clase que no puede ser instanciada directamente y se utiliza
como base para otras clases. Se declara utilizando la palabra clave abstract. Una clase abstracta
puede contener métodos abstractos (sin implementación) y métodos concretos (con
implementación). Las subclases deben proporcionar una implementación para todos los métodos
abstractos, pero pueden optar por sobrescribir los métodos concretos. Las clases abstractas son
útiles cuando se desea definir un comportamiento común pero dejar que las subclases implementen
los detalles.
Respuesta: Un enum (abreviatura de enumeración) en Java es un tipo de datos que permite definir
un conjunto fijo de constantes. Las enumeraciones son útiles para representar un grupo de valores
relacionados que son constantes, como días de la semana, estados de un proceso, etc. Se definen
utilizando la palabra clave enum. Un enum puede tener métodos, constructores y campos, lo que lo
hace más poderoso que simplemente una lista de constantes. Por ejemplo, se puede utilizar para
facilitar la comparación de valores y garantizar que se utilicen solo valores válidos.
Respuesta: Un bloque estático en Java es un bloque de código que se ejecuta una vez cuando se
carga la clase en memoria, antes de que se cree cualquier objeto de esa clase. Se utiliza para
inicializar variables estáticas o realizar configuraciones iniciales que solo necesitan ejecutarse una
vez. Un bloque estático se declara utilizando la palabra clave static.
Respuesta: Las colecciones en Java son estructuras de datos que permiten almacenar, manipular y
gestionar grupos de objetos. La API de colecciones de Java proporciona interfaces y clases como
List, Set, Map, Queue, y sus implementaciones como ArrayList, HashSet, HashMap, y
LinkedList. Las colecciones son fundamentales para gestionar datos de manera eficiente, ya que
permiten realizar operaciones como agregar, eliminar y buscar elementos. Por ejemplo, ArrayList
es una colección que permite almacenar elementos en un arreglo dinámico que puede crecer y
reducirse según sea necesario.
Respuesta: Un Map es una colección que asocia claves con valores, donde cada clave es única y se
puede usar para acceder a su valor correspondiente. La interfaz Map se implementa en clases como
HashMap, TreeMap, y LinkedHashMap. En un HashMap, la clave se utiliza para calcular un valor
hash, que determina la ubicación del valor en la tabla de hash. Los Map son útiles para realizar
búsquedas rápidas, y ofrecen métodos para insertar, eliminar y buscar elementos.
20. ¿Qué es un List en Java?
Respuesta: List es una interfaz de la API de colecciones de Java que representa una secuencia
ordenada de elementos. Permite elementos duplicados y proporciona métodos para acceder a los
elementos por su posición. Las implementaciones más comunes de List son ArrayList y
LinkedList. ArrayList ofrece un rendimiento eficiente para el acceso aleatorio, mientras que
LinkedList es más adecuado para inserciones y eliminaciones frecuentes en el medio de la lista.
Respuesta: Set es una colección que no permite duplicados y no garantiza un orden específico. Se
utiliza para almacenar elementos únicos. Las implementaciones más comunes son HashSet, que no
mantiene ningún orden, y TreeSet, que mantiene los elementos en orden natural o de acuerdo a un
comparador proporcionado. HashSet es ideal para búsquedas rápidas, mientras que TreeSet
permite operaciones de ordenación.
Respuesta: Un Iterator es una interfaz que proporciona un método para iterar sobre los
elementos de una colección, como List, Set, o Map. Permite recorrer los elementos de la colección
sin exponer su estructura interna. Los métodos clave de Iterator son hasNext(), que verifica si
hay más elementos, y next(), que devuelve el siguiente elemento. También se puede utilizar el
método remove() para eliminar el elemento actual de la colección.
23. ¿Qué es la inmutabilidad en Java?
Respuesta: La inmutabilidad se refiere a la propiedad de un objeto que, una vez creado, no puede
ser modificado. Esto es común en la clase String en Java, donde cualquier operación que
modifique una cadena en realidad crea un nuevo objeto String. La inmutabilidad tiene varias
ventajas, como la seguridad en entornos multihilo y la simplicidad en la gestión del estado del objeto.
Los objetos inmutables son más fáciles de razonar y utilizar en aplicaciones complejas.
Respuesta: StringBuilder es una clase en Java que se utiliza para crear y manipular cadenas de
manera mutable. A diferencia de la clase String, que es inmutable, StringBuilder permite
modificar el contenido de una cadena sin crear un nuevo objeto en cada operación. Esto es útil para
construir cadenas dinámicamente y mejorar el rendimiento en situaciones donde se realizan
múltiples concatenaciones.
Respuesta: Las expresiones lambda son una característica introducida en Java 8 que permite tratar
la programación funcional como un enfoque para escribir código. Una expresión lambda es una
función anónima que puede ser utilizada para implementar métodos de interfaces funcionales
(interfaces con un solo método abstracto). Permiten escribir código más conciso y legible,
especialmente al trabajar con colecciones y API de Streams.
Respuesta: Los métodos predeterminados son una característica introducida en Java 8 que permite
a las interfaces definir métodos con una implementación predeterminada. Esto permite agregar
nuevos métodos a las interfaces sin romper la implementación existente de las clases que ya las
implementan. Se declaran utilizando la palabra clave default. Esto es útil para evolucionar las
interfaces y proporcionar funcionalidades adicionales a las clases que implementan la interfaz.
Respuesta: Un Stream en Java es una secuencia de elementos que permite procesar colecciones de
manera funcional. Introducido en Java 8, los Streams permiten realizar operaciones como filtrado,
mapeo y reducción de manera declarativa, lo que facilita la manipulación de datos. Los Streams no
almacenan datos, sino que proporcionan una forma de procesarlos. Se pueden crear a partir de
colecciones, arrays o generadores. Al usar Streams, se pueden encadenar múltiples operaciones en
una sola línea, mejorando la legibilidad del código.
Respuesta: Un Thread en Java es una unidad de ejecución que permite que una aplicación realice
múltiples tareas al mismo tiempo. Java proporciona la clase Thread y la interfaz Runnable para
trabajar con hilos. Los hilos pueden ser creados extendiendo la clase Thread o implementando la
interfaz Runnable. Al crear hilos, se puede mejorar el rendimiento de aplicaciones, especialmente
en operaciones de I/O, procesamiento de datos, o cualquier tarea que pueda ejecutarse en paralelo.
Respuesta: La herencia múltiple se refiere a la capacidad de una clase de heredar de más de una
clase. Java no permite la herencia múltiple de clases para evitar la complejidad y la ambigüedad que
podría surgir, como el problema del diamante. Sin embargo, Java permite la implementación de
múltiples interfaces, lo que permite a una clase adoptar el comportamiento de varias interfaces. Esto
proporciona una forma de lograr la funcionalidad de herencia múltiple sin los inconvenientes
asociados.
Respuesta: El patrón Singleton es un patrón de diseño que garantiza que una clase tenga una única
instancia y proporciona un punto de acceso global a ella. Este patrón es útil cuando se necesita un
control centralizado, como en el caso de una conexión a base de datos o un gestor de configuración.
En Java, se puede implementar utilizando un constructor privado y un método estático para obtener
la instancia.
Respuesta: La palabra clave volatile se utiliza para indicar que una variable puede ser modificada
por múltiples hilos. Al declarar una variable como volatile, se asegura que cada hilo tenga una
copia actualizada de la variable, lo que evita problemas de caché y garantiza que los cambios en la
variable sean visibles para todos los hilos. Sin embargo, volatile no garantiza la atomicidad, por
lo que no es adecuado para operaciones que requieren varias acciones atómicas.
Respuesta: La palabra clave final se utiliza para declarar constantes, métodos que no pueden ser
sobrescritos y clases que no pueden ser heredadas. Al declarar una variable como final, su valor
no puede ser modificado una vez asignado. Al marcar un método como final, se impide que las
subclases sobrescriban ese método. Y al marcar una clase como final, se evita que se extienda.
Esto es útil para garantizar la estabilidad y la seguridad del código.
Respuesta: Las interfaces funcionales son interfaces que contienen exactamente un método
abstracto. Se introdujeron en Java 8 y son fundamentales para la programación funcional y el uso de
expresiones lambda. Las interfaces funcionales pueden tener métodos predeterminados y métodos
estáticos, pero deben tener un único método abstracto. La anotación @FunctionalInterface se
utiliza para indicar que una interfaz es funcional.
Respuesta: Optional es una clase contenedor introducida en Java 8 que se utiliza para evitar el
uso de null y manejar situaciones donde un valor puede estar presente o ausente. Proporciona
métodos para verificar la presencia de un valor, obtenerlo de manera segura y realizar operaciones
condicionales. Optional ayuda a mejorar la legibilidad del código y reduce el riesgo de
NullPointerException.
Respuesta: Los métodos hashCode() y equals() son fundamentales en Java para comparar
objetos. El método equals() se utiliza para determinar si dos objetos son considerados iguales. Si
se sobrescribe equals(), es común también sobrescribir hashCode() para garantizar que dos
objetos iguales tengan el mismo valor de hash, especialmente cuando se utilizan en colecciones
como HashMap o HashSet.
43. ¿Qué son las anotaciones en Java?
Respuesta: Las anotaciones son una forma de agregar metadatos a las clases, métodos, y otros
elementos en Java. Se introdujeron en Java 5 y permiten realizar tareas como la configuración de
comportamiento en frameworks, generación de documentación, y la verificación en tiempo de
compilación. Las anotaciones se definen utilizando el símbolo @ y pueden tener parámetros. Las
anotaciones más comunes incluyen @Override, @Deprecated, y @SuppressWarnings.
Respuesta: Un constructor es un bloque de código especial que se ejecuta cuando se crea un objeto
de una clase. Se utiliza para inicializar el estado del objeto. Un constructor tiene el mismo nombre
que la clase y no tiene un tipo de retorno. Puede tener parámetros, lo que permite la creación de
objetos con diferentes estados iniciales. Si no se define ningún constructor, Java proporciona uno
por defecto.
Respuesta: Los bloques static se utilizan para inicializar variables estáticas y se ejecutan cuando
la clase se carga en memoria. Por otro lado, los bloques de inicialización no estáticos se utilizan para
inicializar variables de instancia y se ejecutan cada vez que se crea un objeto de la clase. Ambos
tipos de bloques permiten agrupar inicializaciones de forma más organizada.
Respuesta: La palabra clave this se refiere a la instancia actual de una clase. Se utiliza para
acceder a miembros de la clase (variables y métodos) y resolver ambigüedades cuando los
parámetros de los métodos tienen el mismo nombre que las variables de instancia. this es útil en
constructores y métodos para clarificar qué variable se está utilizando.
Respuesta: La serialización es el proceso de convertir un objeto en un flujo de bytes para que pueda
ser almacenado en un archivo, enviado a través de una red, o persistido en una base de datos. En
Java, se logra implementando la interfaz Serializable. Los objetos serializables pueden ser
deserializados posteriormente, recreando el objeto original a partir de los datos almacenados.
Respuesta: Un ListIterator es una interfaz que permite recorrer elementos en una lista en
ambas direcciones (hacia adelante y hacia atrás). A diferencia de un Iterator que solo puede
recorrer en una dirección, el ListIterator proporciona métodos adicionales como add(), set(),
y métodos para acceder al índice actual. Esto es útil cuando se necesita manipular la lista mientras
se itera.
52. ¿Qué es el Thread Pool en Java?
Respuesta: Un Thread Pool (grupo de hilos) es una colección de hilos que se reutilizan para
ejecutar múltiples tareas concurrentes. En lugar de crear un nuevo hilo para cada tarea, se utiliza un
conjunto predefinido de hilos que se pueden asignar a tareas a medida que se completan. Esto
reduce la sobrecarga del sistema y mejora el rendimiento, especialmente en aplicaciones que
requieren una gran cantidad de operaciones concurrentes. Java proporciona el paquete
[Link] que incluye clases como ExecutorService para trabajar con grupos
de hilos.
Respuesta: Los default methods son métodos que se pueden definir en una interfaz con una
implementación por defecto. Introducidos en Java 8, permiten a las interfaces evolucionar al agregar
nuevos métodos sin romper la implementación de las clases existentes que ya implementan la
interfaz. Esto es especialmente útil en frameworks y bibliotecas donde se necesita añadir nuevas
funcionalidades.
Respuesta: Las colecciones en Java son un conjunto de clases e interfaces que se utilizan para
almacenar y manipular grupos de objetos. El marco de colecciones proporciona diferentes tipos de
estructuras de datos, como listas, conjuntos, y mapas, que permiten la gestión eficiente de datos.
Algunas de las colecciones más comunes incluyen ArrayList, HashSet, y HashMap. Cada tipo de
colección tiene sus propias características y se elige en función de las necesidades específicas del
programa.
Respuesta: Map es una interfaz en Java que representa una colección de pares clave-valor, donde
cada clave es única y se utiliza para acceder al valor asociado. Las implementaciones más comunes
de Map son HashMap, TreeMap, y LinkedHashMap. HashMap es ideal para búsquedas rápidas,
mientras que TreeMap mantiene los elementos en orden. Los mapas son útiles para almacenar
datos en una estructura asociativa y para realizar búsquedas eficientes.
Respuesta: Los generics son una característica de Java que permite definir clases, interfaces y
métodos que pueden trabajar con tipos de datos de manera parametrizada. Los generics
proporcionan seguridad de tipos en tiempo de compilación, reduciendo la necesidad de realizar
conversiones de tipo y previniendo errores. Al utilizar generics, se puede definir una colección que
puede contener cualquier tipo de objeto, lo que hace que el código sea más flexible y reusable.
Respuesta: Las expresiones lambda son una característica introducida en Java 8 que permite
escribir implementaciones de interfaces funcionales de forma más concisa. Una expresión lambda es
una función anónima que puede ser tratada como una instancia de una interfaz funcional. Se utiliza
principalmente para implementar el comportamiento de métodos en colecciones y para facilitar la
programación funcional en Java.
Respuesta: Las excepciones personalizadas son clases que extienden la clase Exception y se
utilizan para crear excepciones específicas que representan condiciones de error en una aplicación.
Al definir excepciones personalizadas, se puede proporcionar información más clara y específica
sobre los errores que pueden ocurrir. Es recomendable incluir constructores que permitan la
inclusión de mensajes de error y/o causas de la excepción.
61. ¿Qué es el polimorfismo en Java?
Respuesta: La clase String en Java representa una secuencia de caracteres. Los objetos de tipo
String son inmutables, lo que significa que una vez creados, no pueden ser modificados. Cualquier
operación que parezca modificar un String en realidad crea un nuevo objeto String. Esto
garantiza que las cadenas de caracteres sean seguras para usar en entornos multihilo y mejora el
rendimiento al permitir optimizaciones como la reutilización de cadenas literales. La clase String
proporciona numerosos métodos para manipular cadenas, como length(), substring(),
indexOf(), y toUpperCase().
Respuesta: En Java, throw y throws son dos palabras clave relacionadas con el manejo de
excepciones, pero se utilizan en contextos diferentes. throw se utiliza para lanzar una excepción
específica desde un bloque de código, mientras que throws se utiliza en la firma de un método para
indicar que ese método puede lanzar una o más excepciones. Utilizar throws permite al llamador
del método manejar la excepción, mientras que throw es cómo se lanza realmente la excepción.
Respuesta: Las interfaces de marcador (marker interfaces) son interfaces que no contienen métodos
y se utilizan para proporcionar información adicional sobre una clase a tiempo de ejecución. Un
ejemplo común de una interfaz de marcador en Java es Serializable, que indica que una clase
puede ser serializada. Las interfaces de marcador son útiles para aplicar ciertas propiedades a
clases sin necesidad de definir métodos adicionales, permitiendo al framework o al entorno de
ejecución determinar el comportamiento de una clase.
66. ¿Qué es un bloque synchronized en Java?
Respuesta: Un bloque synchronized en Java es una construcción que se utiliza para controlar el
acceso a un recurso compartido por múltiples hilos. Al marcar un bloque de código como
synchronized, se garantiza que solo un hilo puede acceder a ese bloque a la vez, evitando así
condiciones de carrera y garantizando la consistencia del estado de los objetos. Esto es crucial en
entornos multihilo, donde los hilos pueden interferir entre sí.
Respuesta: Una clase abstracta en Java es una clase que no se puede instanciar directamente y
puede contener métodos abstractos (métodos sin implementación) así como métodos concretos
(métodos con implementación). Las clases abstractas se utilizan para definir un comportamiento
común que puede ser compartido por las subclases. Las subclases deben implementar todos los
métodos abstractos para ser instanciables.
Respuesta: Un Comparator es una interfaz en Java que se utiliza para definir un orden específico
de los objetos. Permite personalizar la forma en que los objetos se comparan entre sí, lo que es útil
al ordenar colecciones de objetos. Un Comparator debe implementar el método compare(), que
toma dos objetos y devuelve un número negativo, cero o positivo dependiendo de si el primer objeto
es menor, igual o mayor que el segundo.
69. ¿Qué es el StringBuilder en Java?
Respuesta: StringBuilder es una clase en Java que se utiliza para crear y manipular cadenas de
caracteres de manera más eficiente que la clase String. A diferencia de String, los objetos de
StringBuilder son mutables, lo que significa que se pueden modificar sin crear un nuevo objeto.
Esto lo hace ideal para operaciones en bucles o concatenaciones múltiples de cadenas, ya que
reduce el costo de rendimiento asociado con la creación de múltiples objetos String.
Respuesta: El patrón de diseño Singleton es un patrón que asegura que una clase tenga una única
instancia y proporciona un punto de acceso global a esa instancia. Este patrón es útil cuando se
necesita controlar el acceso a un recurso compartido, como una base de datos o un archivo de
configuración. En Java, se puede implementar el patrón Singleton de varias maneras, pero una de
las más comunes es a través de una clase estática con un constructor privado y un método estático
para obtener la instancia.
Respuesta: Un Stream en Java es una secuencia de elementos que permite procesar datos de
manera funcional y de forma declarativa. Introducido en Java 8, los Streams permiten realizar
operaciones de filtrado, mapeo y reducción de datos de una colección sin necesidad de escribir
bucles explícitos. Un Stream no almacena datos, sino que se utiliza para realizar operaciones en los
datos de una colección existente.
Respuesta: La inmutabilidad es una propiedad de los objetos que indica que una vez que un objeto
se crea, no puede ser modificado. En Java, las instancias de la clase String son inmutables, lo que
significa que cualquier operación que parezca modificar una cadena realmente crea una nueva
cadena. La inmutabilidad es beneficiosa para la seguridad, la simplicidad y el rendimiento, ya que
permite que los objetos sean compartidos sin riesgo de que sean alterados por otros.
Respuesta: La palabra clave final en Java se utiliza para declarar constantes y restringir la
modificación de variables, métodos y clases. Si se aplica a una variable, su valor no puede cambiar
una vez asignado. Si se aplica a un método, no se puede sobrescribir en subclases. Si se aplica a
una clase, no se puede extender. Esto es útil para definir comportamientos y constantes que no
deben ser alterados.
76. ¿Qué son las anotaciones en Java?
Respuesta: Las anotaciones en Java son una forma de proporcionar metadatos a las clases,
métodos, variables y otros elementos del programa. Se utilizan para añadir información adicional que
puede ser utilizada por el compilador o por herramientas de tiempo de ejecución, como frameworks.
Las anotaciones son definidas utilizando el símbolo @ seguido del nombre de la anotación. Algunas
anotaciones comunes en Java son @Override, @Deprecated, y @SuppressWarnings.
Respuesta: Un bloque static en Java es un bloque de código que se ejecuta una sola vez cuando
la clase es cargada por la máquina virtual de Java. Se utiliza para inicializar variables estáticas o
para realizar configuraciones que solo necesitan ser ejecutadas una vez. Los bloques estáticos
pueden contener cualquier código válido de Java.
Respuesta: Un ThreadPool en Java es un conjunto de hilos que se reutilizan para ejecutar tareas.
En lugar de crear y destruir hilos de forma repetitiva, un ThreadPool mantiene un grupo de hilos
listos para ejecutar tareas, lo que mejora el rendimiento y la eficiencia. La clase ExecutorService
en el paquete [Link] proporciona una interfaz para manejar ThreadPools,
permitiendo enviar tareas que se ejecutarán en los hilos del grupo.
Respuesta: Las clases internas en Java son clases definidas dentro de otra clase. Pueden acceder a
los miembros de la clase externa, incluso a los miembros privados. Existen diferentes tipos de clases
internas, como clases internas no estáticas, estáticas y locales. Las clases internas son útiles para
agrupar lógica relacionada y mejorar la encapsulación.
Respuesta: Runnable es una interfaz funcional en Java que representa una tarea que puede ser
ejecutada por un hilo. Contiene un único método, run(), que define el código que se ejecutará en el
hilo. Al implementar la interfaz Runnable, se puede pasar una instancia de la clase a un objeto
Thread y ejecutar el método run() en un hilo separado.
Respuesta: Las expresiones regulares son patrones utilizados para buscar y manipular texto. En
Java, se pueden utilizar las clases Pattern y Matcher para trabajar con expresiones regulares.
Las expresiones regulares son útiles para validar cadenas, realizar búsquedas y reemplazos, y
analizar texto en una variedad de formatos.
86. ¿Qué es el Garbage Collection en Java?
Respuesta: LinkedList es una implementación de la interfaz List en Java que utiliza una
estructura de datos de lista enlazada para almacenar elementos. A diferencia de ArrayList, que
utiliza un array dinámico, LinkedList permite una inserción y eliminación más eficientes de
elementos en cualquier parte de la lista, ya que solo requiere ajustar los punteros de los nodos. Sin
embargo, el acceso a los elementos es más lento en comparación con ArrayList.
Respuesta: HashMap es una implementación de la interfaz Map en Java que utiliza una tabla hash
para almacenar pares clave-valor. Permite la búsqueda, inserción y eliminación de elementos en
tiempo constante promedio. Las claves en un HashMap deben ser únicas, y el orden de los
elementos no está garantizado. Es una de las implementaciones más comunes para almacenar
datos asociados.
Respuesta: Set es una interfaz en Java que representa una colección de elementos únicos, es decir,
no permite duplicados. Las implementaciones más comunes de Set son HashSet,
LinkedHashSet, y TreeSet. HashSet es la implementación más utilizada, ya que ofrece
operaciones rápidas, mientras que TreeSet mantiene los elementos en orden natural o según un
comparador.
90. ¿Qué es una interfaz en Java?
Respuesta: Una interfaz en Java es un contrato que define un conjunto de métodos abstractos que
una clase debe implementar. Las interfaces permiten la creación de métodos que pueden ser
utilizados por diferentes clases sin necesidad de herencia. Esto promueve la reutilización del código
y la programación orientada a interfaces. Las interfaces pueden contener constantes y métodos
predeterminados desde Java 8.
Respuesta: El patrón de diseño Singleton es un patrón que asegura que una clase tenga una única
instancia y proporciona un punto de acceso global a esa instancia. Esto es útil cuando se necesita
exactamente un objeto, como en el caso de conexiones a bases de datos o configuraciones de
aplicación. La implementación típica implica un constructor privado y un método estático que retorna
la instancia.
93. ¿Qué es una excepción en Java?
Respuesta: Una excepción en Java es un evento anormal que interrumpe el flujo normal de
ejecución de un programa. Las excepciones pueden ser generadas por errores de programación,
problemas de entrada/salida, o condiciones externas. Java utiliza un mecanismo de manejo de
excepciones mediante try, catch, finally, y throw. Las excepciones se dividen en dos
categorías: verificadas y no verificadas.
Respuesta: La inyección de dependencias es un patrón de diseño que permite a un objeto recibir sus
dependencias desde el exterior en lugar de crearlas internamente. Esto mejora la modularidad, la
testabilidad y la mantenibilidad del código. En Java, frameworks como Spring facilitan la inyección de
dependencias mediante el uso de anotaciones o archivos de configuración.
Respuesta: Comparator es una interfaz en Java que permite definir una ordenación personalizada
de objetos. A través de esta interfaz, se pueden crear comparadores que especifican el criterio de
comparación entre instancias de una clase, lo que es útil para colecciones que necesitan ser
ordenadas de manera específica.
Respuesta: Map es una interfaz en Java que representa una colección de pares clave-valor. No
permite claves duplicadas y cada clave se asocia a un único valor. Las implementaciones más
comunes de Map incluyen HashMap, TreeMap, y LinkedHashMap. HashMap es la más utilizada
debido a su eficiencia en operaciones de búsqueda e inserción.
Respuesta: ArrayList es una implementación de la interfaz List en Java que utiliza un array
dinámico para almacenar elementos. Proporciona un acceso rápido a los elementos mediante su
índice, pero las operaciones de inserción y eliminación pueden ser costosas si no se realizan al final
de la lista. Es una de las colecciones más utilizadas debido a su flexibilidad y facilidad de uso.
Respuesta: Las pruebas unitarias son una práctica de desarrollo de software que consiste en probar
individualmente las unidades más pequeñas del código, como métodos y clases, para verificar su
correcto funcionamiento. En Java, el framework más popular para realizar pruebas unitarias es JUnit.
Las pruebas unitarias ayudan a identificar errores temprano en el ciclo de desarrollo y mejoran la
calidad del software.