SlideShare uma empresa Scribd logo
1 de 32
Aula 4 A infra-estrutura aplicacional de colecções do Java (Java Collections Framework)
Na aula anterior… Interfaces Listas e listas ligadas Iteradores 2009/2010 Programação Orientada por Objectos 2
Infra-estrutura aplicacional de colecções do Java Infra-estrutura aplicacional englobando interfaces, classes abstractas e concretas, e algoritmos que disponibilizam vários tipos de colecção em Java Colecções Agregados estruturados de elementos Cada tipo de colecção tem propriedades específicas Têm diferentes eficiências a realizar operações equivalentes 2009/2010 Programação Orientada por Objectos 3 Java Collections Framework (JCF)
JCF: tipos de colecção 2009/2010 Programação Orientada por Objectos 4 Legenda: E – tipo dos elementos K – tipo das chaves de um mapa V – tipo dos valores de um mapa ? – característica depende do tipo concreto Intrínseca – Ordem depende do valor dos elementos (ou da chave) Extrínseca – Ordem depende da forma de inserção e remoção dos elementos.
JCF: principais interfaces 2009/2010 Programação Orientada por Objectos 5 E E «interface» Iterable «interface» Collection E K,V E E «interface» Set «interface» List «interface» Queue «interface» Map “Um conjunto ordenado é um conjunto.” “Uma colecção é iterável.” E E K,V «interface» SortedSet «interface» Deque «interface» SortedMap
JFC: estruturas de dados subjacentes 2009/2010 Programação Orientada por Objectos 6
JCF: elementos, chaves e valores Têm de implementar booleanequals(Objectanother) inthashCode() Operações são fornecidas pela classe Object! Podem ser sobrepostas (com cuidado) Se one.equals(another)então one.hashCode() == another.hashCode() Outras restrições 2009/2010 Programação Orientada por Objectos 7 Para procurar. Para tabelas de endereçamento calculado.
JCF: classes concretas 2009/2010 Programação Orientada por Objectos 8
JCF: classes concretas 2009/2010 Programação Orientada por Objectos 9 E E «interface» RandomAccess «interface» List «interface» Queue E «interface» Deque E E E ArrayList Vector PriorityQueue E E E LinkedList ArrayDeque Stack
JCF: classes concretas 2009/2010 Programação Orientada por Objectos 10 E K,V «interface» Set «interface» Map E K,V E K,V «interface» SortedSet «interface» SortedMap HashMap HashSet E K,V K,V K,V TreeSet TreeMap LinkedHashMap LinkedHashSet
JCF: one.compareTo(another) 2009/2010 Programação Orientada por Objectos 11
JCF: Boas práticas Classe implementa compareTo? Então é de valor Logo, deve sobrepor a sua especialização de equals… …pois por omissão equals compara identidade e não igualdade! As operações compareTo e equals devem ser consistentes… …ou seja, one.compareTo(another) == 0 deve resultar no mesmo que one.equals(another) 2009/2010 Programação Orientada por Objectos 12
public class Rational implements Comparable<Rational> {     private final int numerator;     private final int denominator;     …     public intcompareTo(final Rational another){         return getNumerator() * another.getDenominator()              - another.getNumerator() * getDenominator();     }     … } Aplicação à classe Rational 2009/2010 Programação OrientadaporObjectos 13 «interface» Comparable<T->Rational> Rational
public class Rational implements Comparable<Rational> {     …     public boolean equals(final Object obj) {         if (this == obj)             return true;         if (obj == null || getClass() != obj.getClass())             return false;         final Rational other = (Rational) obj;         return denominator == other.denominator             && numerator == other.numerator;     }     … } Aplicação à classe Rational 2009/2010 Programação OrientadaporObjectos 14
public class Rational implements Comparable<Rational> {     private final int numerator;     private final int denominator;     …     public inthashCode() {         return (getNumerator() + getDenominator())              * (getNumerator() + getDenominator() + 1)              + getDenominator();     }     … } Aplicação à classe Rational 2009/2010 Programação OrientadaporObjectos 15
JCF: List e ArrayList final List<Course> courses =     new ArrayList<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.add(Ip);  // adiciona ao fim courses.add(Poo); int indexOfCourseToRemove = -1; for (int i = 0; i != courses.size(); i++)     if (courses.get(i) == Poo)         indexOfCourseToRemove = i; if (indexOfCourseToRemove != -1)     courses.remove(indexOfCourseToRemove); courses.remove(Ip); 2009/2010 Programação Orientada por Objectos 16 É comum usar um tipo mais genérico para aceder a uma colecção do que a classe real do objecto referenciado. Dessa forma pode-se alterar essa classe alterando apenas uma linha de código. Fará sentido indexar uma lista? E se se mudar a classe real para LinkedList? Remoção fora do ciclo? O.K. Remoção dentro do ciclo? Bronca!
JCF: Vector final Vector<Course> courses =     new Vector<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.add(Ip);  // adiciona ao fim courses.add(Poo); for (int i = 0; i != courses.size(); i++)     out.println(courses.get(i)); 2009/2010 Programação Orientada por Objectos 17
JCF: Stack final Stack<Course> courses =     new Stack<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.push(Ip);  //adiciona no topo courses.push(Poo); while (!courses.isEmpty()) {     out.println(courses.peek());     courses.pop(); } 2009/2010 Programação Orientada por Objectos 18
JCF: List, LinkedList e Iterator final List<Course> courses =      new LinkedList<Course>(); … final Course Esi = new Course("ES I"); … final Iterator<Course> iterator =     courses.iterator(); while (iterator.hasNext()) {     Course course = iterator.next();     if (course == Esi)         iterator.remove(); } 2009/2010 Programação Orientada por Objectos 19 Dois em um: avança e devolve. Muito discutível! Remoção segura: É removido o último elemento devolvido por next().
JCF: LinkedList e Queue final Queue<Course> courses = new LinkedList<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.add(Ip); // adicionaaoinício courses.add(Poo); // adicionaaoinício out.println(courses.element()); out.println(courses.element()); final Iterator<Course> iterator = courses.iterator(); while (iterator.hasNext()) {     Course course = iterator.next();     out.println(course); } 2009/2010 Programação Orientada por Objectos 20 Mais uma vez,  dois em um…
JCF: LinkedList e Deque final Deque<Course> courses = new LinkedList<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.addFirst(Ip); // adicionaaoinício courses.addLast(Poo); // adicionaaofim out.println(courses.getFirst()); out.println(courses.getLast()); final Iterator<Course> iterator = courses.iterator(); while (iterator.hasNext()) {     Course course = iterator.next();     out.println(course); } 2009/2010 Programação Orientada por Objectos 21 Mais uma vez,  dois em um…
Ciclo for-each final List<Course> courses =      new LinkedList<Course>(); for (Course course : courses)     out.println(course); 2009/2010 Programação Orientada por Objectos 22 Modo de iteração compacto, sem usar iterador, mas … de utilização limitada (não se pode alterar a colecção, não se pode facilmente percorrer subsequências da colecção, etc.).
JCF: Iteração e alteração concorrentes final List<Course> courses =      new LinkedList<Course>(); … final Course Poo = new Course(“POO"); … for (Course course : courses) { courses.remove(Poo);     out.println(course); } 2009/2010 Programação Orientada por Objectos 23 Alterações durante o ciclo produzem resultados inesperados. Pode mesmo ser lançada a excepção ConcurrentModificationException.
JCF: Map e HashMap final Map<String, Course> courses =      new HashMap<String, Course>(); … courses.put("IP", new Course("Introdução à …")); … if (courses.containsKey("IP"))     out.println(courses.get("IP")); for (String key : courses.keySet())     out.println(key); for (Map.Entry<String, Course> entry : courses.entrySet())     out.println(entry); for (Course course : courses.values())     out.println(course); 2009/2010 Programação Orientada por Objectos 24
JCF: Map e TreeMap final Map<String, Course> courses =      new TreeMap<String, Course>(); … courses.put("IP", new Course("Introdução à …")); … if (courses.containsKey("IP"))     out.println(courses.get("IP")); for (String key : courses.keySet())     out.println(key); for (Map.Entry<String, Course> entry : courses.entrySet())     out.println(entry); for (Course course : courses.values())     out.println(course); 2009/2010 Programação Orientada por Objectos 25
JCF: Queue e LinkedList Queue<String> courseNames =     new LinkedList<String>(); courseNames.add("POO"); courseNames.add("ES I"); courseNames.add("IP"); while(!courseNames.isEmpty()) {     out.println(courseNames.element()); courseNames.remove(); } 2009/2010 Programação Orientada por Objectos 26
JCF: Queue e PriorityQueue Queue<String> courseNames =     new PriorityQueue<String>(); courseNames.add("POO"); courseNames.add(“ES I"); courseNames.add("IP"); while(!courseNames.isEmpty()) {     out.println(courseNames.element());     courseNames.remove(); } 2009/2010 Programação Orientada por Objectos 27
JCF: Boas práticas na utilização de colecções Não usar colecções de Object Usar o tipo de colecção mais adequado Atentar na diferente eficiência das mesmas operações em diferentes tipos de colecção (consultar a documentação) Não alterar uma colecção durante uma iteração ao longo dos elementos (ou usar o iterador para o fazer) 2009/2010 Programação Orientada por Objectos 28
JCF: Boas práticas na utilização de colecções Alteração de elementos de colecções com ordem intrínseca pode ter efeitos inesperados Usar sempre classes (de valor) imutáveis quando for necessária ordem intrínseca Ter atenção à documentação: nem todas as colecções permitem a inserção de elementos nulos 2009/2010 Programação Orientada por Objectos 29
A reter… A JCF é uma infra-estrutura aplicacional englobando interfaces, classes abstractas e concretas, e algoritmos que disponibilizam vários tipos de colecção em Java As colecções são agregados estruturados de elementos, tendo cada tipo de colecção propriedades específicas, particularmente quanto à eficiência com que realiza cada operação Para usar bem estas classes é necessário conhecer bem a documentação! 2009/2010 Programação Orientada por Objectos 30
A ler para a próxima aula… Secção 18.6 do livro: Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice-Hall, 2008.ISBN: 978-0-13-605966-0 2009/2010 Programação Orientada por Objectos 31
Aula 4: Sumário A infra-estrutura aplicacional de colecções do Java (Java Collections Framework) 2009/2010 Programação Orientada por Objectos 32

Mais conteúdo relacionado

Semelhante a Programação Orientada por Objectos - Aula 4

Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasSemana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasManuel Menezes de Sequeira
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação FuncionalTales Andrade
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#Felipe Pimentel
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...Manuel Menezes de Sequeira
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocosRicardo Bolanho
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, ScannerManuel Menezes de Sequeira
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...Manuel Menezes de Sequeira
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - FlisolLeonn Leite
 
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutines
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a CoroutinesTDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutines
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutinestdc-globalcode
 
Aula01
Aula01Aula01
Aula01vdlos
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxClaudia Ferlin
 
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Rogério Moraes de Carvalho
 

Semelhante a Programação Orientada por Objectos - Aula 4 (20)

Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasSemana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação Funcional
 
ESTRUTURA DE DADOS (JAVA) AULA 09
ESTRUTURA DE DADOS (JAVA) AULA 09ESTRUTURA DE DADOS (JAVA) AULA 09
ESTRUTURA DE DADOS (JAVA) AULA 09
 
Programação Orientada por Objectos - Aula 7
Programação Orientada por Objectos - Aula 7Programação Orientada por Objectos - Aula 7
Programação Orientada por Objectos - Aula 7
 
[CLPE] Design patterns com c#
[CLPE] Design patterns com c#[CLPE] Design patterns com c#
[CLPE] Design patterns com c#
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
PHP 5.3 - Funções
PHP 5.3 - FunçõesPHP 5.3 - Funções
PHP 5.3 - Funções
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocos
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, Scanner
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
Aula5
Aula5Aula5
Aula5
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - Flisol
 
Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2
 
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutines
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a CoroutinesTDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutines
TDC2018SP | Trilha Android - Assincronismo no Android, de RxJava a Coroutines
 
Aula01
Aula01Aula01
Aula01
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 

Mais de Manuel Menezes de Sequeira

14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...Manuel Menezes de Sequeira
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...Manuel Menezes de Sequeira
 
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...Manuel Menezes de Sequeira
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...Manuel Menezes de Sequeira
 
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...Manuel Menezes de Sequeira
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...Manuel Menezes de Sequeira
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...Manuel Menezes de Sequeira
 
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...Manuel Menezes de Sequeira
 
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...Manuel Menezes de Sequeira
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...Manuel Menezes de Sequeira
 
Semana 8: Classes e instâncias, cadeias de caracteres
Semana  8: Classes e instâncias, cadeias de caracteresSemana  8: Classes e instâncias, cadeias de caracteres
Semana 8: Classes e instâncias, cadeias de caracteresManuel Menezes de Sequeira
 
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana  6: Matrizes multidimensionais, estratégias de resolução de problemasSemana  6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemasManuel Menezes de Sequeira
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaManuel Menezes de Sequeira
 
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
Semana  1: Programação como arte de resolver problemas, algoritmos e problema...Semana  1: Programação como arte de resolver problemas, algoritmos e problema...
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...Manuel Menezes de Sequeira
 
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...Manuel Menezes de Sequeira
 
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)Manuel Menezes de Sequeira
 

Mais de Manuel Menezes de Sequeira (20)

14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
14. Interfaces; Listas e cadeias ligadas; Iteradores – Fundamentos de Program...
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
 
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
12. Paradigmas da programação; Programação orientada por objectos; Pacotes – ...
 
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
9. Operação toString(); Classes, instâncias e objectos; Scanner – Fundamentos...
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
 
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
7. Arrays multidimensionais; Estratégias de resolução de problemas – Fundamen...
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
 
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de P...
 
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
1. Computador; Línguas naturais; Linguagens de Programação; Algoritmo e progr...
 
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
6. Caracteres; Tipos char e int; Tipos de valor e de referência – Fundamentos...
 
Semana 8: Classes e instâncias, cadeias de caracteres
Semana  8: Classes e instâncias, cadeias de caracteresSemana  8: Classes e instâncias, cadeias de caracteres
Semana 8: Classes e instâncias, cadeias de caracteres
 
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana  6: Matrizes multidimensionais, estratégias de resolução de problemasSemana  6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
 
Semana 2: Funções e listas, variáveis
Semana  2: Funções e listas, variáveisSemana  2: Funções e listas, variáveis
Semana 2: Funções e listas, variáveis
 
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
Semana  1: Programação como arte de resolver problemas, algoritmos e problema...Semana  1: Programação como arte de resolver problemas, algoritmos e problema...
Semana 1: Programação como arte de resolver problemas, algoritmos e problema...
 
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...Semana  0: Computadores, linguagens e linguagens de programação, Noções de al...
Semana 0: Computadores, linguagens e linguagens de programação, Noções de al...
 
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
Semana 11: Enumerações, limites de tipos numéricos (gama e precisão)
 
Eng.ª do Software - 10. Testes de software
Eng.ª do Software - 10. Testes de softwareEng.ª do Software - 10. Testes de software
Eng.ª do Software - 10. Testes de software
 

Último

Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptMaiteFerreira4
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
VARIEDADES LINGUÍSTICAS - 1. pptx
VARIEDADES        LINGUÍSTICAS - 1. pptxVARIEDADES        LINGUÍSTICAS - 1. pptx
VARIEDADES LINGUÍSTICAS - 1. pptxMarlene Cunhada
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdflucassilva721057
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.Mary Alvarenga
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreCIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreElianeElika
 
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresAnaCarinaKucharski1
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....LuizHenriquedeAlmeid6
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
Rotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaRotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaronaldojacademico
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxferreirapriscilla84
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOAulasgravadas3
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfCamillaBrito19
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
Libras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS MemoriaLibras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS Memorialgrecchi
 
Ficha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFicha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFtimaMoreira35
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxleandropereira983288
 

Último (20)

Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.ppt
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
VARIEDADES LINGUÍSTICAS - 1. pptx
VARIEDADES        LINGUÍSTICAS - 1. pptxVARIEDADES        LINGUÍSTICAS - 1. pptx
VARIEDADES LINGUÍSTICAS - 1. pptx
 
Noções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdfNoções de Farmacologia - Flávia Soares.pdf
Noções de Farmacologia - Flávia Soares.pdf
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestreCIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
CIÊNCIAS HUMANAS - ENSINO MÉDIO. 2024 2 bimestre
 
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos DescritoresATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
ATIVIDADE PARA ENTENDER -Pizzaria dos Descritores
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
Rotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaRotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riqueza
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptx
 
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃOFASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
FASE 1 MÉTODO LUMA E PONTO. TUDO SOBRE REDAÇÃO
 
o ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdfo ciclo do contato Jorge Ponciano Ribeiro.pdf
o ciclo do contato Jorge Ponciano Ribeiro.pdf
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
Libras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS MemoriaLibras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS Memoria
 
Ficha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdfFicha de trabalho com palavras- simples e complexas.pdf
Ficha de trabalho com palavras- simples e complexas.pdf
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptx
 

Programação Orientada por Objectos - Aula 4

  • 1. Aula 4 A infra-estrutura aplicacional de colecções do Java (Java Collections Framework)
  • 2. Na aula anterior… Interfaces Listas e listas ligadas Iteradores 2009/2010 Programação Orientada por Objectos 2
  • 3. Infra-estrutura aplicacional de colecções do Java Infra-estrutura aplicacional englobando interfaces, classes abstractas e concretas, e algoritmos que disponibilizam vários tipos de colecção em Java Colecções Agregados estruturados de elementos Cada tipo de colecção tem propriedades específicas Têm diferentes eficiências a realizar operações equivalentes 2009/2010 Programação Orientada por Objectos 3 Java Collections Framework (JCF)
  • 4. JCF: tipos de colecção 2009/2010 Programação Orientada por Objectos 4 Legenda: E – tipo dos elementos K – tipo das chaves de um mapa V – tipo dos valores de um mapa ? – característica depende do tipo concreto Intrínseca – Ordem depende do valor dos elementos (ou da chave) Extrínseca – Ordem depende da forma de inserção e remoção dos elementos.
  • 5. JCF: principais interfaces 2009/2010 Programação Orientada por Objectos 5 E E «interface» Iterable «interface» Collection E K,V E E «interface» Set «interface» List «interface» Queue «interface» Map “Um conjunto ordenado é um conjunto.” “Uma colecção é iterável.” E E K,V «interface» SortedSet «interface» Deque «interface» SortedMap
  • 6. JFC: estruturas de dados subjacentes 2009/2010 Programação Orientada por Objectos 6
  • 7. JCF: elementos, chaves e valores Têm de implementar booleanequals(Objectanother) inthashCode() Operações são fornecidas pela classe Object! Podem ser sobrepostas (com cuidado) Se one.equals(another)então one.hashCode() == another.hashCode() Outras restrições 2009/2010 Programação Orientada por Objectos 7 Para procurar. Para tabelas de endereçamento calculado.
  • 8. JCF: classes concretas 2009/2010 Programação Orientada por Objectos 8
  • 9. JCF: classes concretas 2009/2010 Programação Orientada por Objectos 9 E E «interface» RandomAccess «interface» List «interface» Queue E «interface» Deque E E E ArrayList Vector PriorityQueue E E E LinkedList ArrayDeque Stack
  • 10. JCF: classes concretas 2009/2010 Programação Orientada por Objectos 10 E K,V «interface» Set «interface» Map E K,V E K,V «interface» SortedSet «interface» SortedMap HashMap HashSet E K,V K,V K,V TreeSet TreeMap LinkedHashMap LinkedHashSet
  • 11. JCF: one.compareTo(another) 2009/2010 Programação Orientada por Objectos 11
  • 12. JCF: Boas práticas Classe implementa compareTo? Então é de valor Logo, deve sobrepor a sua especialização de equals… …pois por omissão equals compara identidade e não igualdade! As operações compareTo e equals devem ser consistentes… …ou seja, one.compareTo(another) == 0 deve resultar no mesmo que one.equals(another) 2009/2010 Programação Orientada por Objectos 12
  • 13. public class Rational implements Comparable<Rational> { private final int numerator; private final int denominator; … public intcompareTo(final Rational another){ return getNumerator() * another.getDenominator() - another.getNumerator() * getDenominator(); } … } Aplicação à classe Rational 2009/2010 Programação OrientadaporObjectos 13 «interface» Comparable<T->Rational> Rational
  • 14. public class Rational implements Comparable<Rational> { … public boolean equals(final Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; final Rational other = (Rational) obj; return denominator == other.denominator && numerator == other.numerator; } … } Aplicação à classe Rational 2009/2010 Programação OrientadaporObjectos 14
  • 15. public class Rational implements Comparable<Rational> { private final int numerator; private final int denominator; … public inthashCode() { return (getNumerator() + getDenominator()) * (getNumerator() + getDenominator() + 1) + getDenominator(); } … } Aplicação à classe Rational 2009/2010 Programação OrientadaporObjectos 15
  • 16. JCF: List e ArrayList final List<Course> courses = new ArrayList<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.add(Ip); // adiciona ao fim courses.add(Poo); int indexOfCourseToRemove = -1; for (int i = 0; i != courses.size(); i++) if (courses.get(i) == Poo) indexOfCourseToRemove = i; if (indexOfCourseToRemove != -1) courses.remove(indexOfCourseToRemove); courses.remove(Ip); 2009/2010 Programação Orientada por Objectos 16 É comum usar um tipo mais genérico para aceder a uma colecção do que a classe real do objecto referenciado. Dessa forma pode-se alterar essa classe alterando apenas uma linha de código. Fará sentido indexar uma lista? E se se mudar a classe real para LinkedList? Remoção fora do ciclo? O.K. Remoção dentro do ciclo? Bronca!
  • 17. JCF: Vector final Vector<Course> courses = new Vector<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.add(Ip); // adiciona ao fim courses.add(Poo); for (int i = 0; i != courses.size(); i++) out.println(courses.get(i)); 2009/2010 Programação Orientada por Objectos 17
  • 18. JCF: Stack final Stack<Course> courses = new Stack<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.push(Ip); //adiciona no topo courses.push(Poo); while (!courses.isEmpty()) { out.println(courses.peek()); courses.pop(); } 2009/2010 Programação Orientada por Objectos 18
  • 19. JCF: List, LinkedList e Iterator final List<Course> courses = new LinkedList<Course>(); … final Course Esi = new Course("ES I"); … final Iterator<Course> iterator = courses.iterator(); while (iterator.hasNext()) { Course course = iterator.next(); if (course == Esi) iterator.remove(); } 2009/2010 Programação Orientada por Objectos 19 Dois em um: avança e devolve. Muito discutível! Remoção segura: É removido o último elemento devolvido por next().
  • 20. JCF: LinkedList e Queue final Queue<Course> courses = new LinkedList<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.add(Ip); // adicionaaoinício courses.add(Poo); // adicionaaoinício out.println(courses.element()); out.println(courses.element()); final Iterator<Course> iterator = courses.iterator(); while (iterator.hasNext()) { Course course = iterator.next(); out.println(course); } 2009/2010 Programação Orientada por Objectos 20 Mais uma vez, dois em um…
  • 21. JCF: LinkedList e Deque final Deque<Course> courses = new LinkedList<Course>(); final Course Ip = new Course("IP"); final Course Poo = new Course("POO"); courses.addFirst(Ip); // adicionaaoinício courses.addLast(Poo); // adicionaaofim out.println(courses.getFirst()); out.println(courses.getLast()); final Iterator<Course> iterator = courses.iterator(); while (iterator.hasNext()) { Course course = iterator.next(); out.println(course); } 2009/2010 Programação Orientada por Objectos 21 Mais uma vez, dois em um…
  • 22. Ciclo for-each final List<Course> courses = new LinkedList<Course>(); for (Course course : courses) out.println(course); 2009/2010 Programação Orientada por Objectos 22 Modo de iteração compacto, sem usar iterador, mas … de utilização limitada (não se pode alterar a colecção, não se pode facilmente percorrer subsequências da colecção, etc.).
  • 23. JCF: Iteração e alteração concorrentes final List<Course> courses = new LinkedList<Course>(); … final Course Poo = new Course(“POO"); … for (Course course : courses) { courses.remove(Poo); out.println(course); } 2009/2010 Programação Orientada por Objectos 23 Alterações durante o ciclo produzem resultados inesperados. Pode mesmo ser lançada a excepção ConcurrentModificationException.
  • 24. JCF: Map e HashMap final Map<String, Course> courses = new HashMap<String, Course>(); … courses.put("IP", new Course("Introdução à …")); … if (courses.containsKey("IP")) out.println(courses.get("IP")); for (String key : courses.keySet()) out.println(key); for (Map.Entry<String, Course> entry : courses.entrySet()) out.println(entry); for (Course course : courses.values()) out.println(course); 2009/2010 Programação Orientada por Objectos 24
  • 25. JCF: Map e TreeMap final Map<String, Course> courses = new TreeMap<String, Course>(); … courses.put("IP", new Course("Introdução à …")); … if (courses.containsKey("IP")) out.println(courses.get("IP")); for (String key : courses.keySet()) out.println(key); for (Map.Entry<String, Course> entry : courses.entrySet()) out.println(entry); for (Course course : courses.values()) out.println(course); 2009/2010 Programação Orientada por Objectos 25
  • 26. JCF: Queue e LinkedList Queue<String> courseNames = new LinkedList<String>(); courseNames.add("POO"); courseNames.add("ES I"); courseNames.add("IP"); while(!courseNames.isEmpty()) { out.println(courseNames.element()); courseNames.remove(); } 2009/2010 Programação Orientada por Objectos 26
  • 27. JCF: Queue e PriorityQueue Queue<String> courseNames = new PriorityQueue<String>(); courseNames.add("POO"); courseNames.add(“ES I"); courseNames.add("IP"); while(!courseNames.isEmpty()) { out.println(courseNames.element()); courseNames.remove(); } 2009/2010 Programação Orientada por Objectos 27
  • 28. JCF: Boas práticas na utilização de colecções Não usar colecções de Object Usar o tipo de colecção mais adequado Atentar na diferente eficiência das mesmas operações em diferentes tipos de colecção (consultar a documentação) Não alterar uma colecção durante uma iteração ao longo dos elementos (ou usar o iterador para o fazer) 2009/2010 Programação Orientada por Objectos 28
  • 29. JCF: Boas práticas na utilização de colecções Alteração de elementos de colecções com ordem intrínseca pode ter efeitos inesperados Usar sempre classes (de valor) imutáveis quando for necessária ordem intrínseca Ter atenção à documentação: nem todas as colecções permitem a inserção de elementos nulos 2009/2010 Programação Orientada por Objectos 29
  • 30. A reter… A JCF é uma infra-estrutura aplicacional englobando interfaces, classes abstractas e concretas, e algoritmos que disponibilizam vários tipos de colecção em Java As colecções são agregados estruturados de elementos, tendo cada tipo de colecção propriedades específicas, particularmente quanto à eficiência com que realiza cada operação Para usar bem estas classes é necessário conhecer bem a documentação! 2009/2010 Programação Orientada por Objectos 30
  • 31. A ler para a próxima aula… Secção 18.6 do livro: Y. Daniel Liang, Introduction to Java Programming, 7.ª edição, Prentice-Hall, 2008.ISBN: 978-0-13-605966-0 2009/2010 Programação Orientada por Objectos 31
  • 32. Aula 4: Sumário A infra-estrutura aplicacional de colecções do Java (Java Collections Framework) 2009/2010 Programação Orientada por Objectos 32

Notas do Editor

  1. Consulte a documentação da interface Comparable, onde encontrará as propriedades que a operação compareTo tem de ter. É essencial fazê-lo antes de pensar em fornecer a sua própria implementação dessa operação.
  2. Consulte a documentação da interface Comparable, onde encontrará as propriedades que a operação compareTo tem de ter e de que forma deve ser consistente com equals. É essencial fazê-lo antes de pensar em fornecer a sua própria implementação dessas operações.Boas práticas:Definir ordenação intrínseca e noção de igualdade apenas para classes representando tipos de valor.Sempre que possível, torne os tipos de valor imutáveis.Consulte a documentação e as boas práticas do Java para garantir que as suas implementações das operações equals e compareTo são completas, correctas e consistentes. É mais difícil do que parece!