230 likes | 366 Views
ArrayList e Genéricos. Profs. PROG2 - UNISINOS. ArrayList. Implementação de Lista Sequencial pela API do Java Vantagem: Podem crescer (serem redimensionadas) Arrays não podem import java.util.ArrayList; Veja http://java.sun.com/j2se/1.5.0/docs/api/java/util/ArrayList.html. ArrayList.
E N D
ArrayList e Genéricos Profs. PROG2 - UNISINOS
ArrayList • Implementação de Lista Sequencial pela API do Java • Vantagem: • Podem crescer (serem redimensionadas) • 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: • 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): • 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;
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 ); • 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: • System.out.println( list.get( 12 ) ); • String s = list.get( 5 );
Classe ArrayList • Inserindo um elemento no final do ArrayList • 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 • 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) ); }
Métodos da classe ArrayList • public ArrayList<Base_Type>( int initialCapacity ) • public ArrayList<Base_Type>() • 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 ) • 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 ) • 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 ) • 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 ) • 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; • size() se torna size()-1; • Retorna true. • Se não encontrada, retorna false. • Ex: boolean b = list.remove(“caneta”); • public void clear ( ) • Remove todos os elementos; • 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 ) • 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”); • public int lastIndexOf ( Object target ) • 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 ( ) • True se vazio; false caso contrário. • Ex: boolean b = list.isEmpty(); • public int size ( ) • Retorna número de elementos (nós) em ArrayList • Ex: int tam = list.size(); • public void ensureCapacity ( int newCapacity ) • Aumenta a capacidade (se necessário) • Ex: list. ensureCapacity(20); • public void trimToSize ( ) • Reduz a capacidade para tamanho atual • Ex: list. trimToSize();
Métodos da classe ArrayList • Para cópia • public Object[] toArray ( ) • Retorna um array contendo os elementos da lista. • Ex: Object[] v = list.toArray(); • public Object clone ( ) • Retorna uma cópia de ArrayList. • Ex: Object v = list.clone();
Métodos da classe ArrayList • Igualdade • public boolean equals ( Object other ) • 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 );
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; }
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-0622-vector.html • http://www.onjava.com/pub/a/onjava/2001/05/30/optimization.html