¿Por qué ArrayList implica Lista mientras se extiende AbstractList?

La mejor manera de encontrar la respuesta a este tipo de preguntas es mirar el código fuente (y JavaDocs) de AbstractList, ArrayList y List (una interfaz). AbstractList implementa todos los métodos que necesita para implementar una Lista, excepto dos: get (int index) y size (). Esto hace que implementar su propia clase List sea mucho menos trabajo (el principio de programación “no se repita”).

Ahora mire la fuente ArrayList. Implementa get (int index) y size (), como debe ser, pero también implementa algunos de los otros métodos. ¿Por qué vuelve a implementar estos otros métodos? En la mayoría de los casos aquí, la razón es la eficiencia. Un ArrayList conoce su implementación interna (una matriz de elementos), por lo que puede hacer algunas cosas de manera más eficiente que confiar en la implementación de AbstractList.

En comparación, en el código fuente de LinkedList para ver cómo implementa ciertos métodos de manera diferente, especialmente el método get (int index).

Un buen ejercicio sería implementar su propia subclase List. Comenzará algo como esto:

  List myList = new AbstractList () {
     @Anular
     Objeto público get (int index) {
         // necesita implementar esto de alguna manera
         volver nulo;
     }

     @Anular
     public int size () {
         // necesito implementar esto también
         devuelve 0;
     }
 };

Considere la interfaz y la implementación de la clase abstracta.

  interfaz pública TestInterface {
	 nulo m1 ();
	 nulo m2 ();
 }
 abstract class C1 implementa TestInterface {
 público vacío m2 () {
	 }
 }

Ahora se puede definir otra clase C2 de dos maneras

  clase C2 se extiende C1 {
	 vacío público m1 () {
	 }
 }
 O
 la clase C2 extiende C1 implementa TestInterface {
	 vacío público m1 () {
	 }
 }

Este último no hace ninguna diferencia más que decirle directamente al programador que C1 proporciona todos los métodos de TestInterface.

Espero que esto sea lo que quisiste decir con tu pregunta.

Es principalmente para fines de documentación y para una mejor comprensión de que ArrayList es una especie de lista.

¿Por qué ArrayList implementa List?

More Interesting

Tengo una computadora portátil Compaq con un Pentium Dual Core, Windows Vista, disco duro, 32 bits. ¿Cómo puedo convertirlo en una computadora portátil para juegos?

¿Por qué los programas contienen errores? ¿Cómo se arreglan?

¿Cuáles son algunas herramientas de desarrollo de Python que todo programador autodidacta debe aprender y cómo pueden aprender sobre ellas?

¿Cuál es la diferencia entre eventos, controladores de eventos y oyentes de eventos?

¿Es válido el concepto de ingeniero 10x? Específicamente, ¿es este multiplicador defendible? ¿Hay datos que sugieran que los mejores ingenieros son 10 veces mejores que los ingenieros normales, a diferencia de 3x o 100x?

¿Cómo funciona la búsqueda de imágenes en Pinterest.com?

¿Cuáles pueden ser los usos alternativos de la automatización de pruebas de software (scripting)?

¿Estás en programación o ingeniería de software principalmente por el salario y el estilo de vida?

¿Por qué los desarrolladores de software reciben malos tratos en las empresas?

¿Cómo es que grandes compañías como Google y Facebook, que se dirigen hacia un límite de mercado de un billón de dólares, pueden producir un software tan malo?

Cómo realizar pruebas de API

¿Qué tan válida es la declaración 'JavaScript perjudica su SEO, arquitectura de software, inversión de software y robustez'?

¿Cómo se intercambia la elegancia y el rendimiento del código?

Windows XP requirió 256 MB de memoria del sistema para funcionar sin problemas. Hoy, incluso 4 GB de memoria parecen bajos. ¿Se ha vuelto el software hinchado e ineficiente?

¿Cuál es su opinión sobre el software en el futuro?