Ybadoo - Soluções em Software Livre
Tutoriais
Programação Orientada a Objetos

As classes java.util.ArrayList<E> e java.util.LinkedList<E> permitem o manuseio de uma lista de objetos de forma mais fácil do que a implementada por um array de objetos. No entanto, estas classes não possuem um construtor que receba como parâmetro um array de objetos e inicialize a lista de objetos com tais valores, dificultando a migração dos sistemas legados que ainda utilizam arrays de objetos. Desenvolva um adaptador para essas classes, que permita a inicialização da lista de objetos por meio de um array de objetos, como o implementado pela classe java.util.CopyOnWriteArrayList<E>.

 

Diagrama de Classes na Linguagem de Programação Java ArrayListAdapter.java LinkedListAdapter.java Application.java
Diagrama de Classes
Diagrama de Classes na Linguagem de Programação Java

Arquivo ArrayListAdapter.java

/*************************************************************************
 * Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)  *
 *                  Ybadoo - Solucoes em Software Livre (ybadoo.com.br)  *
 *                                                                       *
 * Permission is granted to copy, distribute and/or modify this document *
 * under the terms of the GNU Free Documentation License, Version 1.3 or *
 * any later version published by the  Free Software Foundation; with no *
 * Invariant Sections,  no Front-Cover Texts, and no Back-Cover Texts. A *
 * A copy of the  license is included in  the section entitled "GNU Free *
 * Documentation License".                                               *
 *                                                                       *
 * Ubuntu 16.10 (GNU/Linux 4.8.0-39-generic)                             *
 * OpenJDK Version "1.8.0_121"                                           *
 * OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)               *
 *************************************************************************/

package com.ybadoo.tutoriais.poo.tutorial09.exercicio29;

import java.util.ArrayList;
import java.util.Collection;

/**
 * Adaptador da classe ArrayList para inicializar a lista com os elementos
 * de um vetor
 *
 * @param <E> tipo dos elementos a serem armazenados no ArrayList
 */
public class ArrayListAdapter<E> extends ArrayList<E>
{
  /**
   * Identificador de serialização da classe
   */
  private static final long serialVersionUID = 1L;

  /**
   * Inicializar uma lista vazia com uma capacidade inicial de dez elementos
   */
  public ArrayListAdapter()
  {
    super();
  }

  /**
   * Inicializar uma lista contendo os elementos da coleção especificada,
   * na ordem em que são retornados pelo iterador da coleção
   *
   * @param collection a coleção cujos elementos devem ser colocados nesta
   *   lista
   * @throws NullPointerException se a coleção especificada for nula
   */
  public ArrayListAdapter(Collection<? extends E> collection)
  {
    super(collection);
  }

  /**
   * Inicializar uma lista contendo os elementos do vetor especificado,
   * na ordem em que são retornados pelo índice do vetor
   *
   * @param array o vetor cujos elementos devem ser colocados nesta lista
   * @throws NullPointerException se o vetor especificado for nulo
   */
  public ArrayListAdapter(E[] array)
  {
    super(array.length);

    for(E element: array)
    {
      add(element);
    }
  }

  /**
   * Inicializar uma lista vazia com a capacidade inicial especificada
   *
   * @param initialCapacity a capacidade inicial da lista
   * @throws IllegalArgumentException se a capacidade inicial especificada
   *   for negativa
   */
  public ArrayListAdapter(int initialCapacity)
  {
    super(initialCapacity);
  }
}

Arquivo LinkedListAdapter.java

/*************************************************************************
 * Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)  *
 *                  Ybadoo - Solucoes em Software Livre (ybadoo.com.br)  *
 *                                                                       *
 * Permission is granted to copy, distribute and/or modify this document *
 * under the terms of the GNU Free Documentation License, Version 1.3 or *
 * any later version published by the  Free Software Foundation; with no *
 * Invariant Sections,  no Front-Cover Texts, and no Back-Cover Texts. A *
 * A copy of the  license is included in  the section entitled "GNU Free *
 * Documentation License".                                               *
 *                                                                       *
 * Ubuntu 16.10 (GNU/Linux 4.8.0-39-generic)                             *
 * OpenJDK Version "1.8.0_121"                                           *
 * OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)               *
 *************************************************************************/

package com.ybadoo.tutoriais.poo.tutorial09.exercicio29;

import java.util.Collection;
import java.util.LinkedList;

/**
 * Adaptador da classe LinkedList para inicializar a lista com os elementos
 * de um vetor
 *
 * @param <E> tipo dos elementos a serem armazenados no LinkedList
 */
public class LinkedListAdapter<E> extends LinkedList<E>
{
  /**
   * Identificador de serialização da classe
   */
  private static final long serialVersionUID = 1L;

  /**
   * Inicializar uma lista vazia
   */
  public LinkedListAdapter()
  {
    super();
  }

  /**
   * Inicializar uma lista contendo os elementos da coleção especificada,
   * na ordem em que são retornados pelo iterador da coleção
   *
   * @param collection a coleção cujos elementos devem ser colocados nesta
   *   lista
   * @throws NullPointerException se a coleção especificada for nula
   */
  public LinkedListAdapter(Collection<? extends E> collection)
  {
    super(collection);
  }

  /**
   * Inicializar uma lista contendo os elementos do vetor especificado,
   * na ordem em que são retornados pelo índice do vetor
   *
   * @param array o vetor cujos elementos devem ser colocados nesta lista
   * @throws NullPointerException se o vetor especificado for nulo
   */
  public LinkedListAdapter(E[] array)
  {
    super();

    for(E element: array)
    {
      add(element);
    }
  }
}

Arquivo Application.java

/*************************************************************************
 * Copyright (C) 2009/2024 - Cristiano Lehrer (cristiano@ybadoo.com.br)  *
 *                  Ybadoo - Solucoes em Software Livre (ybadoo.com.br)  *
 *                                                                       *
 * Permission is granted to copy, distribute and/or modify this document *
 * under the terms of the GNU Free Documentation License, Version 1.3 or *
 * any later version published by the  Free Software Foundation; with no *
 * Invariant Sections,  no Front-Cover Texts, and no Back-Cover Texts. A *
 * A copy of the  license is included in  the section entitled "GNU Free *
 * Documentation License".                                               *
 *                                                                       *
 * Ubuntu 16.10 (GNU/Linux 4.8.0-39-generic)                             *
 * OpenJDK Version "1.8.0_121"                                           *
 * OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)               *
 *************************************************************************/

package com.ybadoo.tutoriais.poo.tutorial09.exercicio29;

import java.util.List;

/**
 * Classe responsável pela execução do padrão de projeto Adapter
 */
public class Application
{
  /**
   * Construtor para inicializar a execução do padrão de projeto Adapter
   */
  private Application()
  {

  }

  /**
   * Método principal da linguagem de programação Java
   *
   * @param args argumentos da linha de comando (não utilizado)
   */
  public static void main(String[] args)
  {
    Integer[] elements = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    List<Integer> arrayList = new ArrayListAdapter<>(elements);

    System.out.println(arrayList);  // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    List<Integer> linkedList = new LinkedListAdapter<>(elements);

    System.out.println(linkedList); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  }
}