arraylist e genéricos profs. prog2 - unisinos 1. arraylist implementação de lista sequencial...

23
ArrayList e Genéricos Profs. PROG2 - UNISINOS 1

Upload: internet

Post on 21-Apr-2015

111 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

ArrayList e Genéricos

Profs. PROG2 - UNISINOS

1

Page 2: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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

2

Page 3: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

ArrayList

Desvantagens:1. Menos eficiente que array2. 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

3

Page 4: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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

Page 5: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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.

5

Page 6: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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 );

6

Page 7: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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.

7

Page 8: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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.

8

Page 9: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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

Page 10: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

Métodos da classe ArrayList

10

Page 11: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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>();

11

Page 12: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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);

12

Page 13: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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”);

13

Page 14: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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”);

14

Page 15: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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);

15

Page 16: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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 ();

16

Page 17: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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”);

17

Page 18: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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();

18

Page 19: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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();

19

Page 20: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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);

20

Page 21: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

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

Page 22: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

for-each loop for-each também funciona com arrays:

// Retorna o soma dos elementos de aint sum ( int[] a ) {

int result = 0;for (int item : a)

result += item;return result;

}

22

Page 23: ArrayList e Genéricos Profs. PROG2 - UNISINOS 1. ArrayList  Implementação de Lista Sequencial pela API do Java  Vantagem:  Podem crescer (serem redimensionadas)

23

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