A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Programação Orientada a Objetos

Apresentações semelhantes


Apresentação em tema: "Programação Orientada a Objetos"— Transcrição da apresentação:

1 Programação Orientada a Objetos
Aula 6 – Coleções Listas Aprender como o conceito de coleção pode ser expresso de forma genérica Examinar a interface de dois tipos diferentes de coleções: Listas e Conjuntos.

2 Conceitos Gerais Uma coleção é uma estrutura de dados que permite armazenar vários objetos. A coleção é, em si, um objeto que agrupa vários outros objetos. Principais operações: adição, remoção, acesso, pesquisa, indagar sobre atributos.

3 Tipos de Coleções Dependendo da forma de fazer as 4 operações básicas (adição, remoção, acesso e pesquisa), teremos vários tipos de coleções Certas operações poderão ter um desempenho melhor ou pior dependendo do tipo de coleção Certas operações poderão ter restrições ou funcionalidade especial dependendo do tipo de coleção Começaremos com as listas (também chamado de sequência).

4

5 Interface Collection

6 Listas Uma lista é uma coleção de elementos arrumados numa ordem linear, isto é, onde cada elemento tem um antecessor (exceto o primeiro) e um sucessor (exceto o último). Normalmente implementada como: Array Lista Encadeada

7 Listas As operações mais importantes de uma coleção do tipo Lista são:
Adição de elementos Em uma posição específica ou no fim da lista. Remoção de elementos Remover um objeto presente em qualquer lugar da lista, fornecendo o índice desejado. Acesso aos elementos Obter o elemento de qualquer posição da lista, fornecendo o índice desejado. Iterar sobre os elementos. Pesquisa de elementos Descobrir se um certo elemento está na lista Descobrir o índice de um certo elemento na lista (onde está) Indagar sobre atributos Obter o número de elementos da coleção

8 Interface List

9 Fatos importantes sobre Listas
Inserção Listas preservam a ordem de inserção! O método add é sobrecarregado: add(E): adiciona o elemento ao fim da lista add(int, E): adiciona o elemento no índice especificado O elemento que antes ocupava aquele índice e os posteriores a ele são movidos uma casa à direita. Dar uma olhada na implementação de ArrayList através do eclipse.

10 Fatos importantes sobre Listas
Remoção O método remove também é sobrecarregado: remove(int): remove o objeto pelo índice, e retorna o objeto removido remove(E): remove o elemento utilizando a implementação de equals As listas não possuem “buracos”! Os elementos posteriores ao elemento removido são movidos uma casa à esquerda. Dar uma olhada na implementação de ArrayList através do eclipse.

11 Fatos importantes sobre Listas
Remoção Atenção: remover itens de listas (ou coleções de modo geral) dentro de um for não é recomendado! Dar uma olhada na implementação de ArrayList através do eclipse.

12 Fatos importantes sobre Listas
Remoção usando o Iterator A única maneira segura de remover enquanto itera em uma coleção é através do Iterator. Vectors tendem a ser mais lentos que arrayLists, devido a sincronização.

13 Fatos importantes sobre Listas
Acesso O método get não tem muito mistério: get(int): retorna o elemento pelo índice O get não remove da lista. Dar uma olhada na implementação de ArrayList através do eclipse.

14 Fatos importantes sobre Listas
Pesquisa indexOf(Object): retorna o índice referente à primeira ocorrência daquele objeto contains(Object): retorna um booleano indicando se o objeto está na lista Desempenho? Varia com o tamanho da lista e posição do objeto na lista! Dar uma olhada na implementação de ArrayList através do eclipse.

15 Fatos importantes sobre Listas
Indagar sobre atributos size( ): retorna o tamanho da lista Desempenho? Extremamente rápido! Por que? Dar uma olhada na implementação de ArrayList através do eclipse. Rápido pois as Listas mantém um inteiro controlando o tamanho da lista. Não precisa iterar nelas!

16 Fatos importantes sobre Listas
As listas possuem diferentes implementações: ArrayList, Vector LinkedList O resultado final é o mesmo; Detalhes de implementação/funcionamento são diferentes. Performances diferentes!

17 Fatos importantes sobre Listas
Diferentes implementações: ArrayList vs Vector ArrayLists e Vectors são implementados usando array (bloco contíguo de memória); A forma com que esses arrays crescem são diferentes: No Vector, quando a lista precisar de mais espaço, o tamanho do array será dobrado (por default). É possível especificar o tamanho do incremento no construtor. No ArrayList, quando a lista precisar de mais espaço, o tamanho do array aumentará 50%. Sincronização Vectors são sincronizados, e ArrayLists não! O que isso quer dizer? Vectors tendem a ser mais lentos que arrayLists, devido a sincronização.

18 Fatos importantes sobre Listas
Diferentes implementações: LinkedList LinkedLists são implementados usando listas ligadas, ou seja, ponteiros. Deste modo, a memória utilizada para armazenar uma lista não é contígua. Isto não permite um acesso direto como em arrays. É preciso navegar entre os ponteiros para chegar no fim da lista, por exemplo. Desvantagem: desempenho. Vantagem: economia de memória. Vectors tendem a ser mais lentos que arrayLists, devido a sincronização.

19 Fatos importantes sobre Listas
Desempenho operações ArrayList / Vector LinkedList add(Object) Adiciona no fim da lista. + É instantâneo! A performance não depende do tamanho da lista. + Como a estrutura usada é um array, o acesso a qualquer posição da lista é direto! + É mais rápido do que o add(int, Object), pois não precisa mover os elementos à direita. - A performance depende do tamanho da lista. - Como a estrutura é formada por nós ligados por ponteiros, será preciso percorrer a lista inteira para chegar na última posição. - Logo, é mais lento do que no ArrayList. add(int, Object) - A performance depende do índice e do tamanho da lista. + Encontrar o local para adicionar o elemento é instantâneo. - Deslocar os elementos da lista uma casa à direita pode ser custoso (dependendo do índice e do tamanho da lista). - A performance depende do índice. - Chegar até o local para adicionar o elemento pode ser custoso. + Deslocar os elementos da lista uma casa à direita é instantâneo (basta atualizar os ponteiros). Vectors tendem a ser mais lentos que arrayLists, devido a sincronização. Só usa Vector se o programa tiver threads.

20 Fatos importantes sobre Listas
Desempenho operações ArrayList / Vector LinkedList remove(int) - A performance depende do índice e do tamanho da lista. + Chegar até o local para remover o elemento é instantâneo. - Deslocar os elementos da lista uma casa à esquerda pode ser custoso (dependendo do índice e do tamanho da lista). - A performance depende do índice. - Chegar até o local para remover o elemento pode ser custoso. + Deslocar os elementos da lista uma casa à esquerda é instantâneo (basta atualizar os ponteiros). remove(Object) usa equals - A performance depende da posição do objeto na lista e do tamanho da lista. - É preciso varrer a lista para encontrar o objeto a ser removido. - Deslocar os elementos da lista uma casa à esquerda pode ser custoso (dependendo da posição e do tamanho da lista). - A performance depende da posição do objeto na lista. Vectors tendem a ser mais lentos que arrayLists, devido a sincronização. Só usa Vector se o programa tiver threads.

21 Fatos importantes sobre Listas
Desempenho operações ArrayList / Vector LinkedList get(int) + É instantâneo! A performance não depende do tamanho da lista. + Como a estrutura usada é um array, o acesso a qualquer posição da lista é direto! - A performance depende do índice. - Para chegar ao objeto referenciado em um dado índice é preciso varrer a lista. indexof(Object) contains(Object) usa equals - A performance depende da posição do objeto na lista. - É preciso varrer a lista para encontrar o objeto. Logo, o desempenho dependerá do índice onde estiver esse objeto. size( ) + É instantâneo. + A classe mantém uma variável que controla o tamanho da lista. Vectors tendem a ser mais lentos que arrayLists, devido a sincronização. Só usa Vector se o programa tiver threads.

22 Referências


Carregar ppt "Programação Orientada a Objetos"

Apresentações semelhantes


Anúncios Google