Generics and the ArrayList Class

Propaganda
ArrayList e Genéricos
Profs. PROG2 - UNISINOS
1
ArrayList
Implementação de Lista Sequencial pela API do Java
Vantagem:


Podem crescer (serem redimensionadas)




2
Arrays não podem
import java.util.ArrayList;
Veja http://java.sun.com/j2se/1.5.0/docs/api/java/util/ArrayList.html
ArrayList

Desvantagens:
1.
2.
Menos eficiente que array
Só trabalha com objetos (e não com tipos básicos)

Pode-se ter um ArrayList de Integer, mas não se pode ter
um ArrayList de int.

A partir da versão 1.5, isso não é mais um problema por causa
da conversão automática de classes Wrappers (Integer,
Double, Character, etc) para seus tipos primitivos (int, double,
char):

3
Unboxing e Outboxing
Conversão de Tipo Primitivo para seu
Wrapper
Conversão realizada entre os objetos numéricos (Integer, Float) e o
correspondente tipo primitivo de dado (integer, float).
Tipo primitivo de dado = tipo básico
A partir da versão Java 5.0 é automática (implícita)
Autoboxing:




Converte tipo básico para objeto numérico
 Ex: de int para Integer
int i = 10;
Integer i2 = i;

Unboxing:

Converte objeto numérico para tipo básico
 Ex: de Integer para int
Integer i2 = new Integer(0);
int i = i2;

4
Classe ArrayList
Define um ArrayList de Strings:


ArrayList<String> list = new ArrayList<String>();

Capacidade inicial default é 10.
Define um ArrayList de Aluno:


ArrayList<Aluno> empList
= new ArrayList<Aluno>( 20 );

5
Capacidade inicial é 20.
Classe ArrayList
Substituindo (ou setando) um elemento em uma
determinada posição:


list.set( 12, “Hi, Mom.” );
Retornando um elemento de uma posição:



6
System.out.println( list.get( 12 ) );
String s = list.get( 5 );
Classe ArrayList
Inserindo um elemento no final do ArrayList





7
list.add( “One” );
list.add( “Two” );
list.add( “Three” );
“One” está na posição 0, “Two” está na posição 1, e “Three”
está na posição 2.
ArrayList class

Inserindo um elemento em uma determinada posição






8
i deve ser uma posição usada ou a primeira posição livre
list.add( “One” );
list.add( “Two” );
list.add( “Three” );
list.add( 1, “Fred” );
“One” está na posição 0, “Fred” está na posição 1, “Two”
está na posição 2, e “Three” está na posição 3.
Classe ArrayList
Retornando tamanho da lista (quantidade de nós na lista):


Método size()
for (int i=0; i<list.size(); i++) {
System.out.println( list.get(i) );
}
9
Métodos da classe ArrayList
10
Métodos da classe ArrayList

public ArrayList<Base_Type>( int initialCapacity )

public ArrayList<Base_Type>()


11
Capacidade inicial default é 10
Ex: ArrayList<String> list = new ArrayList<String>();
Métodos da classe ArrayList

Métodos “Array-like”

public Base_Type set ( int index, Base_Type newElement )
 Onde 0<=index<size() (ou exceção)
 Ex: String s = list.set (0, “caderno”);

public Base_Type get ( int index )


12
Onde 0<=index<size() (ou exceção)
Ex: String s = list.get(0);
Métodos da classe ArrayList

Métodos para adicionar elementos

public boolean add ( Base_Type newElement )




13
Adiciona o novo elemento no final
size() cresce em 1
Capacidade aumenta se necessário
Ex: boolean b = list.add(“caneta”);
Métodos da classe ArrayList

Métodos para adicionar elementos

public void add ( int index, Base_Type newElement )






14
0<=index<=size()
Onde se index==size(), insere no final
size() cresce em 1
Capacidade aumenta se necessário
Quando 0<=index<size(), elemento na posição index é movido
para index+1, na index+1 é movido para index+2, …, na size()-1 é
movido para size()
Ex: list.add(0,“caneta”);
Métodos da classe ArrayList

Métodos para remover elementos

public Base_Type remove ( int index )



15
0<=index<size() (ou exceção)
Remove o elemento na posição index; copia para as posições à
esquerda os elementos restantes em index+1 … size()-1.
Ex: String s = list.remove(2);
Métodos da classe ArrayList

Methods to remove elements

public boolean remove( Object theElement )

Se encontrada, remove a primeira ocorrência de theElement; copia
para a esquerda os elementos restantes;





Se não encontrada, retorna false.
Ex: boolean b = list.remove(“caneta”);
public void clear ( )

Remove todos os elementos;


16
size() se torna size()-1;
Retorna true.
size() se torna 0
Ex: list.clear ();
Métodos da classe ArrayList

Métodos de Procura

public boolean contains ( Object target )
 Chama o método equals() de target
 True se ArrayList contém target; false caso contrário.
 Ex: boolean b = list.contains(“caneta”);

public int indexOf ( Object target )




public int lastIndexOf ( Object target )

17
Chama o método equals() de target
Retorna índice (posição) da primeira ocorrência de target em
ArrayList; -1 caso contrário.
Ex: int pos = list.indexOf(“caneta”);

Realiza o mesmo que o anterior, com a diferença que é retornada a
posição da última ocorrência.
Ex: int pos = list.lastIndexOf(“caneta”);
Métodos da classe ArrayList

Gerenciamento da memória (tamanho & capacidade)

public boolean isEmpty ( )



public int size ( )




Aumenta a capacidade (se necessário)
Ex: list. ensureCapacity(20);
public void trimToSize ( )


18
Retorna número de elementos (nós) em ArrayList
Ex: int tam = list.size();
public void ensureCapacity ( int newCapacity )


True se vazio; false caso contrário.
Ex: boolean b = list.isEmpty();
Reduz a capacidade para tamanho atual
Ex: list. trimToSize();
Métodos da classe ArrayList

Para cópia

public Object[] toArray ( )



public Object clone ( )


19
Retorna um array contendo os elementos da lista.
Ex: Object[] v = list.toArray();
Retorna uma cópia de ArrayList.
Ex: Object v = list.clone();
Métodos da classe ArrayList

Igualdade

public boolean equals ( Object other )



20
Verdadeiro somente se ambos possuem o mesmo número de
elementos e os mesmos elementos (na mesma ordem).
Compara cada par de elementos chamando seu método equals()
Ex: boolean b = list.equals(list2);
for-each loop
for (Array_Base_Type var : Collection_Object)
Statement;

Se myList for ArrayList de Strings.
for (String element : myList)
System.out.println( element );
21
for-each loop

for-each também funciona com arrays:
// Retorna o soma dos elementos de a
int sum ( int[] a ) {
int result = 0;
for (int item : a)
result += item;
return result;
}
22
Biblioteca Java

Classes da biblioteca Java que implementam listas em Java:



java.util.Vector
java.util.ArrayList (desde versão 1.2)
Qual a diferença?



Vector é sincronizado, assim todos os métodos da classe Vector são thread-safe
(garante integridade dos dados quando mais de uma thread acessa).
Sincronização tem um custo na performance, assim quando não é necessário
sincronizar, melhor usar ArrayList
Maiores explicações em:


http://www.javaworld.com/javaworld/javaqa/2001-06/03-qa-0622vector.html
http://www.onjava.com/pub/a/onjava/2001/05/30/optimization.html
23
Download