├── .idea ├── .gitignore ├── aws.xml ├── codeStyles │ └── codeStyleConfig.xml ├── jpa-buddy.xml ├── misc.xml ├── modules.xml ├── uiDesigner.xml └── vcs.xml ├── README.md ├── assets └── image │ ├── collection-framework-methods.png │ ├── collection-framework.png │ ├── list-interface-hierarchy.png │ ├── map-interface-hierarchy.png │ └── set-interface-hierarchy.png ├── collections-java-api-2023.iml ├── out └── production │ └── collections-java-api-2023 │ └── main │ └── java │ ├── Main.class │ ├── comparableXcomparator │ ├── CompararAno.class │ ├── CompararAnoAutorTitulo.class │ ├── CompararAutor.class │ ├── Livro.class │ ├── Main$1.class │ ├── Main.class │ └── README.md │ ├── generics │ ├── GenericsExempleList.class │ ├── GenericsExempleMap.class │ ├── GenericsExempleSet.class │ └── README.md │ ├── list │ ├── OperacoesBasicas │ │ ├── CarrinhoDeCompras.class │ │ ├── Item.class │ │ ├── ListaTarefa.class │ │ └── Tarefa.class │ ├── Ordenacao │ │ ├── ComparatorPorAltura.class │ │ ├── OrdenacaoNumeros.class │ │ ├── OrdenacaoPessoas.class │ │ └── Pessoa.class │ ├── Pesquisa │ │ ├── CatalogoLivros.class │ │ ├── Livro.class │ │ └── SomaNumeros.class │ └── README.md │ ├── map │ ├── OperacoesBasicas │ │ ├── AgendaContatos.class │ │ └── Dicionario.class │ ├── Ordenacao │ │ ├── AgendaEventos.class │ │ ├── ComparatorPorAutor.class │ │ ├── ComparatorPorPreco.class │ │ ├── Evento.class │ │ ├── LivrariaOnline.class │ │ └── Livro.class │ ├── Pesquisa │ │ ├── ContagemPalavras.class │ │ ├── EstoqueProdutos.class │ │ └── Produto.class │ └── README.md │ └── set │ ├── OperacoesBasicas │ ├── ConjuntoConvidados.class │ ├── ConjuntoPalavrasUnicas.class │ └── Convidado.class │ ├── Ordenacao │ ├── Aluno.class │ ├── CadastroProdutos.class │ ├── ComparatorNota.class │ ├── ComparatorPorPreco.class │ ├── GerenciadorAlunos.class │ └── Produto.class │ ├── Pesquisa │ ├── AgendaContatos.class │ ├── Contato.class │ ├── ListaTarefas.class │ └── Tarefa.class │ └── README.md └── src └── main └── java ├── comparableXcomparator ├── Livro.java ├── Main.java └── README.md ├── generics ├── GenericsExempleList.java ├── GenericsExempleMap.java ├── GenericsExempleSet.java └── README.md ├── list ├── OperacoesBasicas │ ├── CarrinhoDeCompras.java │ ├── Item.java │ ├── ListaTarefa.java │ └── Tarefa.java ├── Ordenacao │ ├── OrdenacaoNumeros.java │ ├── OrdenacaoPessoas.java │ └── Pessoa.java ├── Pesquisa │ ├── CatalogoLivros.java │ ├── Livro.java │ └── SomaNumeros.java └── README.md ├── map ├── OperacoesBasicas │ ├── AgendaContatos.java │ └── Dicionario.java ├── Ordenacao │ ├── AgendaEventos.java │ ├── Evento.java │ ├── LivrariaOnline.java │ └── Livro.java ├── Pesquisa │ ├── ContagemPalavras.java │ ├── EstoqueProdutos.java │ └── Produto.java └── README.md └── set ├── OperacoesBasicas ├── ConjuntoConvidados.java ├── ConjuntoPalavrasUnicas.java └── Convidado.java ├── Ordenacao ├── Aluno.java ├── CadastroProdutos.java ├── GerenciadorAlunos.java └── Produto.java ├── Pesquisa ├── AgendaContatos.java ├── Contato.java ├── ListaTarefas.java └── Tarefa.java └── README.md /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/aws.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 16 | 17 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/jpa-buddy.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/uiDesigner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Collection Framework API 2 | 3 | - Uma coleção (collection) é uma estrutura de dados que serve para agrupar muitos elementos em uma única unidade; estes elementos precisam ser objetos. 4 | - Uma Collection pode ter coleções homogêneas e heterogêneas, normalmente utilizamos coleções homogêneas de um tipo específico. 5 | - O núcleo principal das coleções é formado pelas interfaces da figura abaixo; essas interfaces permitem manipular a coleção independentemente do nível de detalhe que elas representam. 6 | - Temos quatro grandes tipos de coleções: List (lista), Set (conjunto), Queue (fila) e Map (mapa). A partir dessas interfaces, temos muitas subclasses concretas que implementam várias formas diferentes de se trabalhar com cada coleção. 7 | 8 |

9 |
10 | Hierarchy of Collection Framework in Java 11 |

12 | 13 | 14 | - Todas as interfaces e classes são encontradas dentro do pacote (package) java.util. 15 | - Embora a interface Map não seja filha direta da interface Collection, ela também é considerada uma coleção devido à sua função. 16 | 17 |

18 | List interface hierarchy Java
19 | Method Sumary Collection Interface 20 |

21 | 22 | 23 | --- 24 | 25 | ### Referências: 26 | 27 | [1] "Java Collections - Universidade Java." Universidade Java. Disponível em: http://www.universidadejava.com.br/java/java-collection/. 28 | 29 | [2] "Java™ Platform, Standard Edition 17 API Specification - Interface Collection." Oracle. Disponível em: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collection.html. 30 | 31 | [3] "Java Comparator and Comparable - Baeldung." Baeldung. Disponível em: https://www.baeldung.com/java-comparator-comparable. 32 | 33 | [4] "Java™ Platform, Standard Edition 17 API Specification - Class Collections." Oracle. Disponível em: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collections.html. 34 | 35 | --- 36 | Se você preferir usar o protocolo SSH para comunicação com o repositório, siga as etapas abaixo: 37 | 38 | 1. Abra o terminal ou prompt de comando. 39 | 2. Navegue até o diretório do projeto. 40 | 3. Execute o seguinte comando para mudar a URL remota para SSH: 41 | 42 | ```shell 43 | git remote set-url origin git@github.com:cami-la/collections-java-api-2023.git 44 | 45 | ### Dúvidas e Suporte 46 | 47 | Caso você tenha alguma dúvida, problema ou sugestão, fique à vontade para abrir uma issue no repositório. Espero conseguir te ajudar! (: 48 | -------------------------------------------------------------------------------- /assets/image/collection-framework-methods.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/assets/image/collection-framework-methods.png -------------------------------------------------------------------------------- /assets/image/collection-framework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/assets/image/collection-framework.png -------------------------------------------------------------------------------- /assets/image/list-interface-hierarchy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/assets/image/list-interface-hierarchy.png -------------------------------------------------------------------------------- /assets/image/map-interface-hierarchy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/assets/image/map-interface-hierarchy.png -------------------------------------------------------------------------------- /assets/image/set-interface-hierarchy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/assets/image/set-interface-hierarchy.png -------------------------------------------------------------------------------- /collections-java-api-2023.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/Main.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/comparableXcomparator/CompararAno.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/comparableXcomparator/CompararAno.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/comparableXcomparator/CompararAnoAutorTitulo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/comparableXcomparator/CompararAnoAutorTitulo.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/comparableXcomparator/CompararAutor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/comparableXcomparator/CompararAutor.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/comparableXcomparator/Livro.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/comparableXcomparator/Livro.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/comparableXcomparator/Main$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/comparableXcomparator/Main$1.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/comparableXcomparator/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/comparableXcomparator/Main.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/comparableXcomparator/README.md: -------------------------------------------------------------------------------- 1 | # Comparable X Comparator 2 | 3 | ## Comparable 4 | 5 | - `Comparable` fornece uma única sequência de ordenação. Em outras palavras, podemos ordenar a coleção com base em um único elemento, como id, nome e preço. 6 | - `Comparable` afeta a classe original, ou seja, a classe atual é modificada. 7 | - `Comparable` fornece o método `compareTo()` para ordenar elementos. 8 | - `Comparable` está presente no pacote `java.lang`. 9 | - Podemos ordenar os elementos da lista do tipo `Comparable` usando o método `Collections.sort(List)`. 10 | 11 | ## Comparator 12 | 13 | - O `Comparator` fornece o método `compare()` para ordenar elementos. 14 | - O `Comparator` fornece múltiplas sequências de ordenação. Em outras palavras, podemos ordenar a coleção com base em múltiplos elementos, como id, nome, preço, etc. 15 | - O `Comparator` não afeta a classe original, ou seja, a classe atual não é modificada. 16 | - Um `Comparator` está presente no pacote `java.util`. 17 | - Podemos ordenar os elementos da lista do tipo `Comparator` usando o método `Collections.sort(List, Comparator)`. 18 | 19 | ## Collections 20 | 21 | - A classe `Collections` é uma classe utilitária do Java para operações comuns em coleções. 22 | - Ela fornece métodos para ordenação, busca, manipulação e sincronização de coleções. 23 | - O método `sort()` é usado para ordenar uma lista em ordem ascendente. 24 | - O método `sort()` em conjunto com `Collections.reverseOrder()` permite ordenar em ordem descendente. 25 | 26 | 27 | ```java 28 | package main.java.comparableXcomparator; 29 | 30 | import java.util.Comparator; 31 | 32 | // Uma classe 'Livro' que implementa Comparable 33 | class Livro implements Comparable { 34 | private String titulo; 35 | private String autor; 36 | private int ano; 37 | 38 | // Construtor 39 | public Livro(String ti, String au, int an) { 40 | this.titulo = ti; 41 | this.autor = au; 42 | this.ano = an; 43 | } 44 | 45 | // Usado para ordenar livros por ano 46 | public int compareTo(Livro l) { 47 | return titulo.compareTo(l.titulo); 48 | } 49 | 50 | // Métodos getters para acessar os dados privados 51 | public String getTitulo() { 52 | return titulo; 53 | } 54 | 55 | public String getAutor() { 56 | return autor; 57 | } 58 | 59 | public int getAno() { 60 | return ano; 61 | } 62 | } 63 | 64 | // Classe para comparar Livro por autor 65 | class CompararAutor implements Comparator { 66 | @Override 67 | public int compare(Livro l1, Livro l2) { 68 | return l1.getAutor().compareTo(l2.getAutor()); 69 | } 70 | } 71 | 72 | // Classe para comparar Livro por ano 73 | class CompararAno implements Comparator { 74 | @Override 75 | public int compare(Livro l1, Livro l2) { 76 | if (l1.getAno() < l2.getAno()) 77 | return -1; 78 | if (l1.getAno() > l2.getAno()) 79 | return 1; 80 | else 81 | return 0; 82 | } 83 | } 84 | 85 | class CompararAnoAutorTitulo implements Comparator { 86 | @Override 87 | public int compare(Livro l1, Livro l2) { 88 | int ano = Integer.compare(l1.getAno(), l2.getAno()); 89 | if (ano != 0) 90 | return ano; 91 | int autor = l1.getAutor().compareTo(l2.getAutor()); 92 | if (autor != 0) 93 | return autor; 94 | return l1.getTitulo().compareTo(l2.getTitulo()); 95 | } 96 | } 97 | ``` 98 | --- 99 | 100 | ### Livros citados: 101 | 102 | - ✨ Entendendo Algoritmos: Um Guia Ilustrado Para Programadores e Outros Curiosos - https://amzn.to/3IVsZRM 103 | - ✨ Microsserviços Prontos Para a Produção: Construindo Sistemas Padronizados em uma Organização de Engenharia de Software - https://amzn.to/3oOUkyb 104 | - ✨ Java - Guia do Programador: Atualizado Para Java 16 - https://amzn.to/3oJPanf 105 | - ✨ Microsserviços Prontos Para a Produção: Construindo Sistemas Padronizados em uma Organização de Engenharia de Software - https://amzn.to/3MOMVHf 106 | - ✨ Kotlin em ação - https://amzn.to/3MFyncM 107 | 108 | --- 109 | 110 | ### Referências: 111 | 112 | [1] "Comparable vs Comparator in Java." GeeksforGeeks. Disponível em: https://www.geeksforgeeks.org/comparable-vs-comparator-in-java/. 113 | 114 | [2] "Difference between Comparable and Comparator in Java." JavaTpoint. Disponível em: https://www.javatpoint.com/difference-between-comparable-and-comparator. 115 | 116 | [3] "Java™ Platform, Standard Edition 17 API Specification - Class Collections." Oracle. Disponível em: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collections.html. 117 | 118 | --- 119 | 120 | ### Dúvidas e Suporte 121 | 122 | Caso você tenha alguma dúvida, problema ou sugestão, fique à vontade para abrir uma issue no repositório. Espero conseguir te ajudar! (: 123 | -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/generics/GenericsExempleList.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/generics/GenericsExempleList.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/generics/GenericsExempleMap.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/generics/GenericsExempleMap.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/generics/GenericsExempleSet.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/generics/GenericsExempleSet.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/generics/README.md: -------------------------------------------------------------------------------- 1 | # Generics Type 2 | 3 | - Um tipo genérico é uma classe genérica ou uma interface que é parametrizada em relação a tipos. 4 | - A classe `Box` a seguir será modificada para demonstrar o conceito: 5 | 6 | ```java 7 | public class Box { 8 | private Object object; 9 | 10 | public void set(Object object) { this.object = object; } 11 | public Object get() { return object; } 12 | } 13 | ``` 14 | 15 | - O símbolo `<>` é chamado de "diamond" ou "diamond operator" foi um recurso introduzido no Java 7 e é usado no contexto de tipos genéricos em Java para inferir automaticamente o tipo com base no contexto. 16 | - Para atualizar a classe `Box` para usar generics, você cria uma declaração de tipo genérico alterando o código `public class Box` para `public class Box`. 17 | - Isso introduz a variável de tipo, `T`, que pode ser usada em qualquer lugar dentro da classe: 18 | 19 | ```java 20 | /** 21 | Versão genérica da classe Box. 22 | @param o tipo do valor sendo armazenado 23 | */ 24 | public class Box { 25 | // T representa "Type" (tipo) 26 | private T t; 27 | 28 | public void set(T t) { this.t = t; } 29 | public T get() { return t; } 30 | } 31 | ``` 32 | 33 | - Como você pode ver, todas as ocorrências de Object são substituídas por T. 34 | - Uma variável de tipo pode ser qualquer tipo não primitivo que você especificar: qualquer tipo de classe, qualquer tipo de interface, qualquer tipo de array ou até mesmo outra variável de tipo. 35 | - Essa mesma técnica pode ser aplicada para criar interfaces genérica. 36 | - Os nomes de parâmetros de tipo mais comumente usados são: 37 | - E - Elemento (usado extensivamente pelo Java Collections Framework) 38 | - K - Chave 39 | - N - Número 40 | - T - Tipo 41 | - V - Valor 42 | - S, U, V, etc. - 2º, 3º, 4º tipos 43 | 44 | ### Vantagens simples de usar generics nas interfaces Collection em Java: 45 | 46 | 1. Segurança do tipo de dados: O uso de generics garante que apenas objetos de um tipo específico possam ser adicionados à coleção, evitando erros de tipo e garantindo que você esteja lidando com os dados corretos. 47 | 2. Código mais legível: Ao usar generics, você pode especificar o tipo de dados esperado ou retornado pela coleção, o que torna o código mais fácil de entender e ler. 48 | 3. Detecta erros mais cedo: O compilador verifica se você está usando os tipos corretos durante a compilação, ajudando a identificar erros de tipo antes mesmo de executar o programa. 49 | 4. Reutilização de código: Com generics, você pode criar classes e métodos genéricos que funcionam com diferentes tipos de coleções, evitando a necessidade de duplicar código para cada tipo específico. 50 | 5. Melhor desempenho: O uso de generics pode melhorar o desempenho, pois evita a necessidade de conversões de tipo desnecessárias e permite que o compilador otimize o código com base no tipo especificado. 51 | 52 | --- 53 | 54 | ### Referências: 55 | 56 | [1] "Java Tutorials - Generics - Generic Types." Oracle. Disponível em: https://docs.oracle.com/javase/tutorial/java/generics/types.html. 57 | 58 | --- 59 | 60 | ### Dúvidas e Suporte 61 | 62 | Caso você tenha alguma dúvida, problema ou sugestão, fique à vontade para abrir uma issue no repositório. Espero conseguir te ajudar! (: -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/list/OperacoesBasicas/CarrinhoDeCompras.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/list/OperacoesBasicas/CarrinhoDeCompras.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/list/OperacoesBasicas/Item.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/list/OperacoesBasicas/Item.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/list/OperacoesBasicas/ListaTarefa.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/list/OperacoesBasicas/ListaTarefa.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/list/OperacoesBasicas/Tarefa.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/list/OperacoesBasicas/Tarefa.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/list/Ordenacao/ComparatorPorAltura.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/list/Ordenacao/ComparatorPorAltura.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/list/Ordenacao/OrdenacaoNumeros.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/list/Ordenacao/OrdenacaoNumeros.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/list/Ordenacao/OrdenacaoPessoas.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/list/Ordenacao/OrdenacaoPessoas.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/list/Ordenacao/Pessoa.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/list/Ordenacao/Pessoa.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/list/Pesquisa/CatalogoLivros.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/list/Pesquisa/CatalogoLivros.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/list/Pesquisa/Livro.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/list/Pesquisa/Livro.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/list/Pesquisa/SomaNumeros.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/list/Pesquisa/SomaNumeros.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/list/README.md: -------------------------------------------------------------------------------- 1 | # List Interface 2 | 3 |

4 | List interface hierarchy Java
5 | Hierarchy of Collection Framework in Java 6 |

7 | 8 | - A interface List é uma coleção ordenada que permite a inclusão de elementos duplicados. 9 | - É um dos tipos de coleção mais utilizados em Java, e as classes de implementação comuns são ArrayList e LinkedList. 10 | - A List se assemelha a uma matriz com comprimento dinâmico, permitindo adicionar ou remover elementos. 11 | - A interface List fornece métodos úteis para adicionar elementos em posições específicas, remover ou substituir elementos com base no índice e obter sublistas usando índices. 12 | - A classe Collections fornece algoritmos úteis para manipulação de List, como ordenação (sort), embaralhamento (shuffle), reversão (reverse) e busca binária (binarySearch). 13 | 14 | > ##### *ArrayList*: O ArrayList é uma implementação da interface List que armazena os elementos em uma estrutura de array redimensionável. Isso significa que ele pode crescer automaticamente à medida que novos elementos são adicionados. A principal vantagem do ArrayList é o acesso rápido aos elementos por meio de índices, o que permite recuperar um elemento específico de forma eficiente. No entanto, adicionar ou remover elementos no meio da lista pode ser mais lento, pois requer a realocação de elementos. 15 | 16 | > ##### *LinkedList*: O LinkedList é uma implementação da interface List que armazena os elementos em uma lista duplamente vinculada. Cada elemento contém referências para o elemento anterior e próximo na lista. A principal vantagem do LinkedList é a eficiência na adição ou remoção de elementos no início ou no final da lista, pois não é necessário realocar elementos. No entanto, o acesso aos elementos por meio de índices é mais lento, pois requer percorrer a lista até o elemento desejado. 17 | 18 | > ##### *Vector*: O Vector é uma implementação antiga da interface List que é semelhante ao ArrayList, mas é sincronizada, ou seja, é thread-safe. Isso significa que várias threads podem manipular um objeto Vector ao mesmo tempo sem causar problemas de concorrência. No entanto, essa sincronização adiciona uma sobrecarga de desempenho, tornando o Vector menos eficiente do que o ArrayList em cenários em que a concorrência não é um problema. Por esse motivo, o uso do Vector é menos comum em aplicações modernas. 19 | 20 | ### Referências: 21 | 22 | [1] "Collections in Java Tutorial." DigitalOcean Community. Disponível em: https://www.digitalocean.com/community/tutorials/collections-in-java-tutorial. 23 | 24 | [2] "Java™ Platform, Standard Edition 17 API Specification - Class List." Oracle. Disponível em: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html. 25 | 26 | # Fixando os Conhecimentos 27 | 28 | Exercícios: 29 | 30 | 1. Operações Básicas com List 31 | 2. Pesquisa em List 32 | 3. Ordenação nas List 33 | 34 | ## Operações Básicas com List 35 | 36 | ### 1. Lista de Tarefas 37 |

Crie uma classe chamada "ListaTarefas" que possui uma lista de tarefas como atributo. Cada tarefa é representada por uma classe chamada "Tarefa" que possui um atributo de descrição. Implemente os seguintes métodos: 38 | 39 | - `adicionarTarefa(String descricao)`: Adiciona uma nova tarefa à lista com a descrição fornecida. 40 | - `removerTarefa(String descricao)`: Remove uma tarefa da lista com base em sua descrição. 41 | - `obterNumeroTotalTarefas()`: Retorna o número total de tarefas na lista. 42 | - `obterDescricoesTarefas()`: Retorna uma lista contendo a descrição de todas as tarefas na lista. 43 |

44 | 45 | ### 2. Carrinho de Compras: 46 | 47 |

Crie uma classe chamada "CarrinhoDeCompras" que representa um carrinho de compras online. O carrinho deve ser implementado como uma lista de itens. Cada item é representado por uma classe chamada "Item" que possui atributos como nome, preço e quantidade. Implemente os seguintes métodos: 48 | 49 | - `adicionarItem(String nome, double preco, int quantidade)`: Adiciona um item ao carrinho com o nome, preço e quantidade especificados. 50 | - `removerItem(String nome)`: Remove um item do carrinho com base no seu nome. 51 | - `calcularValorTotal()`: Calcula e retorna o valor total do carrinho, levando em consideração o preço e a quantidade de cada item. 52 | - `exibirItens()`: Exibe todos os itens presentes no carrinho, mostrando seus nomes, preços e quantidades. 53 |

54 | 55 | ---- 56 | 57 | ## Pesquisa em List 58 | 59 | ### 1. Catálogo de Livros 60 | 61 |

Crie uma classe chamada "CatalogoLivros" que possui uma lista de objetos do tipo "Livro" como atributo. Cada livro possui atributos como título, autor e ano de publicação. Implemente os seguintes métodos: 62 | 63 | - `adicionarLivro(String titulo, String autor, int anoPublicacao)`: Adiciona um livro ao catálogo. 64 | - `pesquisarPorAutor(String autor)`: Pesquisa livros por autor e retorna uma lista com os livros encontrados. 65 | - `pesquisarPorIntervaloAnos(int anoInicial, int anoFinal)`: Pesquisa livros publicados em um determinado intervalo de anos e retorna uma lista com os livros encontrados. 66 | - `pesquisarPorTitulo(String titulo)`: Pesquisa livros por título e retorna o primeiro livro encontrado. 67 |

68 | 69 | ### 2. Soma de Números 70 | 71 |

Crie uma classe chamada "SomaNumeros" que possui uma lista de números inteiros como atributo. Implemente os seguintes métodos: 72 | 73 | - `adicionarNumero(int numero)`: Adiciona um número à lista de números. 74 | - `calcularSoma()`: Calcula a soma de todos os números na lista e retorna o resultado. 75 | - `encontrarMaiorNumero()`: Encontra o maior número na lista e retorna o valor. 76 | - `encontrarMenorNumero()`: Encontra o menor número na lista e retorna o valor. 77 | - `exibirNumeros()`: Retorna uma lista contendo todos os números presentes na lista. 78 | 79 | ------- 80 | 81 | ## Ordenação em List 82 | 83 | ### 1. Ordenação de Pessoas 84 | 85 |

Crie uma classe chamada "OrdenacaoPessoas" que possui uma lista de objetos do tipo "Pessoa" como atributo. Cada pessoa possui atributos como nome, idade e altura. Implemente os seguintes métodos: 86 | 87 | - `adicionarPessoa(String nome, int idade, double altura)`: Adiciona uma pessoa à lista. 88 | - `ordenarPorIdade()`: Ordena as pessoas da lista por idade usando a interface Comparable. 89 | - `ordenarPorAltura()`: Ordena as pessoas da lista por altura usando um Comparator personalizado. 90 |

91 | 92 | ### 2. Ordenação de Números 93 | 94 |

Crie uma classe chamada "OrdenacaoNumeros" que possui uma lista de números inteiros como atributo. Implemente os seguintes métodos: 95 | 96 | - `adicionarNumero(int numero)`: Adiciona um número à lista. 97 | - `ordenarAscendente()`: Ordena os números da lista em ordem ascendente usando a interface Comparable e a class Collections. 98 | - `ordenarDescendente()`: Ordena os números da lista em ordem descendente usando um Comparable e a class Collections. 99 |

100 | 101 | --- 102 | ### Dúvidas e Suporte 103 | 104 | Caso você tenha alguma dúvida, problema ou sugestão, fique à vontade para abrir uma issue no repositório. Espero conseguir te ajudar! (: 105 | -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/map/OperacoesBasicas/AgendaContatos.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/map/OperacoesBasicas/AgendaContatos.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/map/OperacoesBasicas/Dicionario.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/map/OperacoesBasicas/Dicionario.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/map/Ordenacao/AgendaEventos.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/map/Ordenacao/AgendaEventos.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/map/Ordenacao/ComparatorPorAutor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/map/Ordenacao/ComparatorPorAutor.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/map/Ordenacao/ComparatorPorPreco.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/map/Ordenacao/ComparatorPorPreco.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/map/Ordenacao/Evento.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/map/Ordenacao/Evento.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/map/Ordenacao/LivrariaOnline.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/map/Ordenacao/LivrariaOnline.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/map/Ordenacao/Livro.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/map/Ordenacao/Livro.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/map/Pesquisa/ContagemPalavras.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/map/Pesquisa/ContagemPalavras.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/map/Pesquisa/EstoqueProdutos.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/map/Pesquisa/EstoqueProdutos.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/map/Pesquisa/Produto.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/map/Pesquisa/Produto.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/map/README.md: -------------------------------------------------------------------------------- 1 | # MAP 2 | 3 |

4 | Map interface hierarchy Java
5 | Hierarchy of Collection Framework in Java 6 |

7 | 8 | - A interface `Map` é usada para mapear dados na forma de chaves e valores. 9 | - O `Map` do Java é um objeto que mapeia chaves para valores. 10 | - Um `Map` não pode conter chaves duplicadas: cada chave pode mapear no máximo um valor. 11 | - A plataforma Java possui três implementações gerais de `Map`: `HashMap`, `TreeMap` e `LinkedHashMap`. 12 | - As operações básicas do `Map` são: `put` (inserir ou atualizar), `get` (obter), `containsKey` (verificar se contém uma chave), `containsValue` (verificar se contém um valor), `size` (obter o tamanho) e `isEmpty` (verificar se está vazio). 13 | 14 | > ##### *HashTable* é uma implementação antiga da interface Map no Java que é sincronizada e thread-safe, tornando-a adequada para uso em ambientes concorrentes. Ela não permite chaves ou valores nulos e os elementos não são mantidos em uma ordem específica. 15 | 16 | > ##### *LinkedHashMap*, por outro lado, é uma implementação da interface Map que preserva a ordem de inserção dos elementos. Cada elemento possui referências ao próximo e ao anterior, formando uma lista encadeada. Isso permite que os elementos sejam iterados na ordem em que foram inseridos. Além disso, o LinkedHashMap também permite chaves ou valores nulos. 17 | 18 | > ##### *HashMap* é uma implementação da interface Map que não mantém uma ordem específica dos elementos. Ele armazena os elementos internamente usando uma função de hash para melhorar a eficiência das operações de pesquisa e acesso. O HashMap também permite chaves ou valores nulos. 19 | 20 | ### Referências: 21 | 22 | [1] "Collections in Java Tutorial." DigitalOcean Community. Disponível em: https://www.digitalocean.com/community/tutorials/collections-in-java-tutorial. 23 | 24 | [2] "Java™ Platform, Standard Edition 17 API Specification - Class Map." Oracle. Disponível em: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html. 25 | 26 | ## Fixando os Conhecimentos 27 | 28 | Exercícios: 29 | 30 | 1. Operações Básicas com Map 31 | 2. Pesquisa em Map 32 | 3. Ordenação nas Map 33 | 34 | ## Operações Básicas com Map 35 | 36 | ### 1. Agenda de Contatos 37 | 38 |

39 | Crie uma classe chamada "AgendaContatos" que utilize um Map para armazenar os contatos. Cada contato possui um nome como chave e um número de telefone como valor. Implemente os seguintes métodos: 40 | 41 | - `adicionarContato(String nome, Integer telefone)`: Adiciona um contato à agenda, associando o nome do contato ao número de telefone correspondente. 42 | - `removerContato(String nome)`: Remove um contato da agenda, dado o nome do contato. 43 | - `exibirContatos()`: Exibe todos os contatos da agenda, mostrando o nome e o número de telefone de cada contato. 44 | - `pesquisarPorNome(String nome)`: Pesquisa um contato pelo nome e retorna o número de telefone correspondente. 45 |

46 | 47 | ### 2. Dicionário 48 | 49 |

50 | Crie uma classe chamada "Dicionario" que utilize um Map para armazenar palavras e suas respectivas definições. Implemente os seguintes métodos: 51 | 52 | - `adicionarPalavra(String palavra, String definicao)`: Adiciona uma palavra e sua definição ao dicionário, associando a palavra à sua definição correspondente. 53 | - `removerPalavra(String palavra)`: Remove uma palavra do dicionário, dado o termo a ser removido. 54 | - `exibirPalavras()`: Exibe todas as palavras e suas definições do dicionário, mostrando cada palavra seguida de sua respectiva definição. 55 | - `pesquisarPorPalavra(String palavra)`: Pesquisa uma palavra no dicionário e retorna sua definição correspondente. 56 |

57 | 58 | --- 59 | 60 | ## Pesquisa em Map 61 | 62 | ### 1. Estoque de Produtos com Preço 63 | 64 |

65 | Crie uma classe chamada "EstoqueProdutos" que utilize um Map para armazenar os produtos, suas quantidades em estoque e seus respectivos preços. Cada produto possui um código como chave e um objeto Produto como valor, contendo nome, quantidade e preço. Implemente os seguintes métodos: 66 | 67 | - `adicionarProduto(long cod, String nome, int quantidade, double preco)`: Adiciona um produto ao estoque, juntamente com a quantidade disponível e o preço. 68 | - `exibirProdutos()`: Exibe todos os produtos, suas quantidades em estoque e preços. 69 | - `calcularValorTotalEstoque()`: Calcula e retorna o valor total do estoque, considerando a quantidade e o preço de cada produto. 70 | - `obterProdutoMaisCaro()`: Retorna o produto mais caro do estoque, ou seja, aquele com o maior preço. 71 | - `obterProdutoMaisBarato()`: Retorna o produto mais barato do estoque, ou seja, aquele com o menor preço. 72 | - `obterProdutoMaiorQuantidadeValorTotalNoEstoque()`: Retorna o produto que está em maior quantidade no estoque, considerando o valor total de cada produto (quantidade * preço). 73 |

74 | 75 | ### 2. Contagem de Palavras 76 | 77 |

78 | Crie uma classe chamada "ContagemPalavras" que utilize um Map para armazenar as palavras e a quantidade de vezes que cada palavra aparece em um texto. Implemente os seguintes métodos: 79 | 80 | - `adicionarPalavra(String palavra, Integer contagem)`: Adiciona uma palavra à contagem. 81 | - `removerPalavra(String palavra)`: Remove uma palavra da contagem, se estiver presente. 82 | - `exibirContagemPalavras()`: Exibe todas as palavras e suas respectivas contagens. 83 | - `encontrarPalavraMaisFrequente()`: Encontra a palavra mais frequente no texto e retorna a palavra e sua contagem. 84 |

85 | 86 | --- 87 | 88 | ## Ordenação nos Map 89 | 90 | ### 1. Agenda de Eventos 91 | 92 |

93 | Crie uma classe chamada "AgendaEventos" que utilize um `Map` para armazenar as datas e seus respectivos Eventos. Cada evento é representado por um objeto da classe "Evento", que possui atributos como nome do evento e o nome da atração. Implemente os seguintes métodos: 94 | 95 | - `adicionarEvento(LocalDate data, String nome, String atracao)`: Adiciona um evento à agenda. 96 | - `exibirAgenda()`: Exibe a agenda de eventos em ordem crescente de data. 97 | - `obterProximoEvento()`: Retorna o próximo evento que ocorrerá. 98 |

99 | 100 | ### 2. Livraria Online 101 | 102 |

103 | Crie uma classe chamada "LivrariaOnline" que representa uma livraria online. Essa classe utiliza um Map para armazenar os livros disponíveis na livraria, utilizando o link da obra na Amazon Marketplace como chave e um objeto da classe "Livro" como valor. A classe "Livro" possui atributos como título, autor e preço. Através da classe "LivrariaOnline", implemente os seguintes métodos: 104 | 105 | - `adicionarLivro(String link, String titulo, String autor, private double preco)`: Adiciona um livro à livraria, utilizando o ISBN como chave no Map. 106 | - `removerLivro(String titulo)`: Remove um livro da livraria, dado o titulo do livro. 107 | - `exibirLivrosOrdenadosPorPreco()`: Exibe os livros da livraria em ordem crescente de preço. 108 | - `pesquisarLivrosPorAutor(String autor)`: Retorna uma lista de todos os livros escritos por um determinado autor. 109 | - `obterLivroMaisCaro()`: Retorna o livro mais caro disponível na livraria. 110 | - `exibirLivroMaisBarato()`: Retorna o livro mais barato disponível na livraria. 111 |

112 | 113 | --- 114 | 115 | ### Dúvidas e Suporte 116 | 117 | Caso você tenha alguma dúvida, problema ou sugestão, fique à vontade para abrir uma issue no repositório. Espero conseguir te ajudar! (: -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/set/OperacoesBasicas/ConjuntoConvidados.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/set/OperacoesBasicas/ConjuntoConvidados.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/set/OperacoesBasicas/ConjuntoPalavrasUnicas.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/set/OperacoesBasicas/ConjuntoPalavrasUnicas.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/set/OperacoesBasicas/Convidado.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/set/OperacoesBasicas/Convidado.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/set/Ordenacao/Aluno.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/set/Ordenacao/Aluno.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/set/Ordenacao/CadastroProdutos.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/set/Ordenacao/CadastroProdutos.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/set/Ordenacao/ComparatorNota.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/set/Ordenacao/ComparatorNota.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/set/Ordenacao/ComparatorPorPreco.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/set/Ordenacao/ComparatorPorPreco.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/set/Ordenacao/GerenciadorAlunos.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/set/Ordenacao/GerenciadorAlunos.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/set/Ordenacao/Produto.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/set/Ordenacao/Produto.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/set/Pesquisa/AgendaContatos.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/set/Pesquisa/AgendaContatos.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/set/Pesquisa/Contato.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/set/Pesquisa/Contato.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/set/Pesquisa/ListaTarefas.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/set/Pesquisa/ListaTarefas.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/set/Pesquisa/Tarefa.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cami-la/collections-java-api-2023/1dd708ae5036156a4109fa0d96f9e9bb33033a12/out/production/collections-java-api-2023/main/java/set/Pesquisa/Tarefa.class -------------------------------------------------------------------------------- /out/production/collections-java-api-2023/main/java/set/README.md: -------------------------------------------------------------------------------- 1 | # SET 2 | 3 |

4 | Set interface hierarchy Java
5 | Hierarchy of Collection Framework in Java 6 |

7 | 8 | - A interface `Set` é uma coleção que não pode conter elementos duplicados. 9 | - Essa interface representa o conceito matemático de um conjunto e é usada para representar conjuntos, como um baralho de cartas. 10 | - A plataforma Java possui três implementações de `Set` de uso geral: `HashSet`, `TreeSet` e `LinkedHashSet`. 11 | - A interface `Set` não permite acesso aleatório a um elemento na coleção. 12 | - Para percorrer os elementos de um `Set`, você pode usar um iterador ou um loop foreach. 13 | 14 | > ##### *HashSet*: O HashSet é uma implementação da interface Set que armazena os elementos em uma tabela hash. Ele não mantém uma ordem específica dos elementos. A principal vantagem do HashSet é que ele oferece um desempenho de busca muito eficiente, pois usa funções hash para indexar os elementos. No entanto, a ordem em que os elementos são adicionados pode não ser preservada ao percorrer o conjunto. 15 | 16 | > ##### *TreeSet*: O TreeSet é uma implementação da interface Set que armazena os elementos em uma árvore binária balanceada. Isso significa que os elementos são armazenados em uma ordem classificada e são mantidos automaticamente em ordem crescente. A principal vantagem do TreeSet é que os elementos são sempre retornados na ordem classificada, o que facilita a obtenção de elementos em uma determinada ordem. No entanto, a busca e a inserção são um pouco mais lentas em comparação com o HashSet. 17 | 18 | > ##### *LinkedHashSet*: O LinkedHashSet é uma implementação da interface Set que mantém a ordem de inserção dos elementos, além de usar uma tabela hash para obter um bom desempenho de busca. Ele é semelhante ao HashSet, mas também mantém uma lista duplamente vinculada que preserva a ordem de inserção. Isso permite que os elementos sejam percorridos na ordem em que foram adicionados. O LinkedHashSet é útil quando você precisa manter a ordem de inserção dos elementos e também ter um bom desempenho de busca. 19 | 20 | ### Referências: 21 | 22 | [1] "Collections in Java Tutorial." DigitalOcean Community. Disponível em: https://www.digitalocean.com/community/tutorials/collections-in-java-tutorial. 23 | 24 | [2] "Java™ Platform, Standard Edition 17 API Specification - Class Set." Oracle. Disponível em: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html. 25 | 26 | ## Fixando os Conhecimentos 27 | 28 | Exercícios: 29 | 30 | 1. Operações Básicas com Set 31 | 2. Pesquisa em Set 32 | 3. Ordenação nas Set 33 | 34 | ## Operações Básicas com Set 35 | 36 | ### 1. Conjunto de Convidados 37 | 38 |

Crie uma classe chamada "ConjuntoConvidados" que possui um conjunto de objetos do tipo "Convidado" como atributo. Cada convidado possui atributos como nome e código do convite. Implemente os seguintes métodos: 39 | 40 | - `adicionarConvidado(String nome, int codigoConvite)`: Adiciona um convidado ao conjunto. 41 | - `removerConvidadoPorCodigoConvite(int codigoConvite)`: Remove um convidado do conjunto com base no código do convite. 42 | - `contarConvidados()`: Conta o número total de convidados no Set. 43 | - `exibirConvidados()`: Exibe todos os convidados do conjunto. 44 |

45 | 46 | ### 2. Conjunto de Palavras Únicas 47 | 48 |

49 | Crie uma classe chamada "ConjuntoPalavrasUnicas" que possui um conjunto de palavras únicas como atributo. Implemente os seguintes métodos: 50 | 51 | - `adicionarPalavra(String palavra)`: Adiciona uma palavra ao conjunto. 52 | - `removerPalavra(String palavra)`: Remove uma palavra do conjunto. 53 | - `verificarPalavra(String palavra)`: Verifica se uma palavra está presente no conjunto. 54 | - `exibirPalavrasUnicas()`: Exibe todas as palavras únicas do conjunto. 55 |

56 | 57 | ---- 58 | 59 | ## Pesquisa em Set 60 | 61 | ### 1. Agenda de Contatos 62 | 63 |

64 | Crie uma classe chamada "AgendaContatos" que possui um conjunto de objetos do tipo "Contato" como atributo. Cada contato possui atributos como nome e número de telefone. Implemente os seguintes métodos: 65 | 66 | - `adicionarContato(String nome, int numero)`: Adiciona um contato à agenda. 67 | - `exibirContatos()`: Exibe todos os contatos da agenda. 68 | - `pesquisarPorNome(String nome)`: Pesquisa contatos pelo nome e retorna uma conjunto com os contatos encontrados. 69 | - `atualizarNumeroContato(String nome, int novoNumero)`: Atualiza o número de telefone de um contato específico. 70 |

71 | 72 | ### 2. Lista de Tarefas 73 | 74 |

75 | Crie uma classe chamada "ListaTarefas" que possui um conjunto de objetos do tipo "Tarefa" como atributo. Cada tarefa possui um atributo de descrição e um atributo booleano para indicar se a tarefa foi concluída ou não. Implemente os seguintes métodos: 76 | 77 | - `adicionarTarefa(String descricao)`: Adiciona uma nova tarefa ao Set. 78 | - `removerTarefa(String descricao)`: Remove uma tarefa do Set de acordo com a descrição, se estiver presente. 79 | - `exibirTarefas()`: Exibe todas as tarefas da lista de tarefas. 80 | - `contarTarefas()`: Conta o número total de tarefas na lista de tarefas. 81 | - `obterTarefasConcluidas()`: Retorna um Set com as tarefas concluídas. 82 | - `obterTarefasPendentes()`: Retorna um Set com as tarefas pendentes. 83 | - `marcarTarefaConcluida(String descricao)`: Marca uma tarefa como concluída de acordo com a descrição. 84 | - `marcarTarefaPendente(String descricao)`: Marca uma tarefa como pendente de acordo com a descrição. 85 | - `limparListaTarefas()`: Remove todas as tarefas da lista de tarefas. 86 |

87 | 88 | --- 89 | 90 | ## Ordenação em Set 91 | 92 | ### 1. Cadastro de Produtos 93 | 94 |

95 | Crie uma classe chamada "CadastroProdutos" que possui um conjunto de objetos do tipo "Produto" como atributo. Cada produto possui atributos como nome, cod, preço e quantidade. Implemente os seguintes métodos: 96 | 97 | - `adicionarProduto(long cod, String nome, double preco, int quantidade)`: Adiciona um produto ao cadastro. 98 | - `exibirProdutosPorNome()`: Exibe todos os produtos do cadastro em ordem alfabética pelo nome. 99 | - `exibirProdutosPorPreco()`: Exibe todos os produtos do cadastro em ordem crescente de preço. 100 |

101 | 102 | ### 2. Lista de Alunos 103 | 104 |

105 | Crie uma classe chamada "GerenciadorAlunos" que irá lidar com uma lista de alunos. Cada aluno terá atributos como nome, matrícula e nota. Implementaremos os seguintes métodos: 106 | 107 | - `adicionarAluno(String nome, Long matricula, double media)`: Adiciona um aluno ao conjunto. 108 | - `removerAluno(long matricula)`: Remove um aluno ao conjunto a partir da matricula, se estiver presente. 109 | - `exibirAlunosPorNome()`: Exibe todos os alunos do conjunto em ordem alfabética pelo nome. 110 | - `exibirAlunosPorNota()`: Exibe todos os alunos do conjunto em ordem crescente de nota. 111 | - `exibirAlunos()`: Exibe todos os alunos do conjunto. 112 |

113 | 114 | --- 115 | ### Dúvidas e Suporte 116 | 117 | Caso você tenha alguma dúvida, problema ou sugestão, fique à vontade para abrir uma issue no repositório. Espero conseguir te ajudar! (: 118 | -------------------------------------------------------------------------------- /src/main/java/comparableXcomparator/Livro.java: -------------------------------------------------------------------------------- 1 | package main.java.comparableXcomparator; 2 | 3 | import java.util.Comparator; 4 | 5 | // Uma classe 'Livro' que implementa Comparable 6 | class Livro implements Comparable { 7 | private String titulo; 8 | private String autor; 9 | private int ano; 10 | 11 | // Construtor 12 | public Livro(String ti, String au, int an) { 13 | this.titulo = ti; 14 | this.autor = au; 15 | this.ano = an; 16 | } 17 | 18 | // Usado para ordenar livros por ano 19 | public int compareTo(Livro l) { 20 | return titulo.compareTo(l.titulo); 21 | } 22 | 23 | // Métodos getters para acessar os dados privados 24 | public String getTitulo() { 25 | return titulo; 26 | } 27 | 28 | public String getAutor() { 29 | return autor; 30 | } 31 | 32 | public int getAno() { 33 | return ano; 34 | } 35 | } 36 | 37 | // Classe para comparar Livro por autor 38 | class CompararAutor implements Comparator { 39 | @Override 40 | public int compare(Livro l1, Livro l2) { 41 | return l1.getAutor().compareTo(l2.getAutor()); 42 | } 43 | } 44 | 45 | // Classe para comparar Livro por ano 46 | class CompararAno implements Comparator { 47 | @Override 48 | public int compare(Livro l1, Livro l2) { 49 | return Integer.compare(l1.getAno(), l2.getAno()); 50 | /* 51 | if (l1.getAno() < l2.getAno()) 52 | return -1; 53 | if (l1.getAno() > l2.getAno()) 54 | return 1; 55 | else 56 | return 0; 57 | */ 58 | } 59 | } 60 | 61 | class CompararAnoAutorTitulo implements Comparator { 62 | @Override 63 | public int compare(Livro l1, Livro l2) { 64 | int ano = Integer.compare(l1.getAno(), l2.getAno()); 65 | if (ano != 0) 66 | return ano; 67 | int autor = l1.getAutor().compareTo(l2.getAutor()); 68 | if (autor != 0) 69 | return autor; 70 | return l1.getTitulo().compareTo(l2.getTitulo()); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/main/java/comparableXcomparator/Main.java: -------------------------------------------------------------------------------- 1 | package main.java.comparableXcomparator; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Collections; 5 | 6 | public class Main { 7 | public static void main(String[] args) { 8 | System.out.println("---------------------------------------"); 9 | ArrayList livros = new ArrayList() { 10 | { 11 | add(new Livro("Java - Guia do Programador: Atualizado Para Java 16", "Peter Jandl Junior", 2021)); 12 | add(new Livro("Desenvolvimento Real de Software: Um guia de projetos para fundamentos em Java", 13 | "Raoul-Gabriel Urma e Richard Warburton", 2021)); 14 | add(new Livro( 15 | "Microsserviços Prontos Para a Produção: Construindo Sistemas Padronizados em uma Organização de Engenharia de Software", 16 | "Susan J. Fowler", 2017)); 17 | add(new Livro("Entendendo Algoritmos: Um Guia Ilustrado Para Programadores e Outros Curiosos", 18 | "Aditya Y. Bhargava", 2017)); 19 | add(new Livro("Kotlin em Ação", "Dmitry Jemerov e Svetlana Isakova", 2017)); 20 | } 21 | }; 22 | 23 | 24 | System.out.println("Livros após a ordenação natural (Título): "); 25 | Collections.sort(livros); 26 | for (Livro livro : livros) { 27 | System.out.println(livro.getTitulo() + " - " + 28 | livro.getAutor() + " - " + 29 | livro.getAno()); 30 | } 31 | 32 | System.out.println("---------------------------------------"); 33 | 34 | System.out.println("Livros após a ordenação por ano: "); 35 | Collections.sort(livros, new CompararAno()); 36 | for (Livro livro : livros) { 37 | System.out.println(livro.getAno() + " - " + 38 | livro.getTitulo() + " - " + 39 | livro.getAutor()); 40 | } 41 | 42 | System.out.println("---------------------------------------"); 43 | 44 | System.out.println("Livros após a ordenação por autor: "); 45 | Collections.sort(livros, new CompararAutor()); 46 | for (Livro livro : livros) { 47 | System.out.println(livro.getAutor() + " - " + 48 | livro.getTitulo() + " - " + 49 | livro.getAno()); 50 | } 51 | 52 | System.out.println("---------------------------------------"); 53 | 54 | System.out.println("Livros após a ordenação por ano, autor e título: "); 55 | Collections.sort(livros, new CompararAnoAutorTitulo()); 56 | for (Livro livro : livros) { 57 | System.out.println(livro.getAno() + " - " + 58 | livro.getAutor() + " - " + 59 | livro.getTitulo()); 60 | } 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/java/comparableXcomparator/README.md: -------------------------------------------------------------------------------- 1 | # Comparable X Comparator 2 | 3 | ## Comparable 4 | 5 | - `Comparable` fornece uma única sequência de ordenação. Em outras palavras, podemos ordenar a coleção com base em um único elemento, como id, nome e preço. 6 | - `Comparable` afeta a classe original, ou seja, a classe atual é modificada. 7 | - `Comparable` fornece o método `compareTo()` para ordenar elementos. 8 | - `Comparable` está presente no pacote `java.lang`. 9 | - Podemos ordenar os elementos da lista do tipo `Comparable` usando o método `Collections.sort(List)`. 10 | 11 | ## Comparator 12 | 13 | - O `Comparator` fornece o método `compare()` para ordenar elementos. 14 | - O `Comparator` fornece múltiplas sequências de ordenação. Em outras palavras, podemos ordenar a coleção com base em múltiplos elementos, como id, nome, preço, etc. 15 | - O `Comparator` não afeta a classe original, ou seja, a classe atual não é modificada. 16 | - Um `Comparator` está presente no pacote `java.util`. 17 | - Podemos ordenar os elementos da lista do tipo `Comparator` usando o método `Collections.sort(List, Comparator)`. 18 | 19 | ## Collections 20 | 21 | - A classe `Collections` é uma classe utilitária do Java para operações comuns em coleções. 22 | - Ela fornece métodos para ordenação, busca, manipulação e sincronização de coleções. 23 | - O método `sort()` é usado para ordenar uma lista em ordem ascendente. 24 | - O método `sort()` em conjunto com `Collections.reverseOrder()` permite ordenar em ordem descendente. 25 | 26 | 27 | ```java 28 | package main.java.comparableXcomparator; 29 | 30 | import java.util.Comparator; 31 | 32 | // Uma classe 'Livro' que implementa Comparable 33 | class Livro implements Comparable { 34 | private String titulo; 35 | private String autor; 36 | private int ano; 37 | 38 | // Construtor 39 | public Livro(String ti, String au, int an) { 40 | this.titulo = ti; 41 | this.autor = au; 42 | this.ano = an; 43 | } 44 | 45 | // Usado para ordenar livros por ano 46 | public int compareTo(Livro l) { 47 | return titulo.compareTo(l.titulo); 48 | } 49 | 50 | // Métodos getters para acessar os dados privados 51 | public String getTitulo() { 52 | return titulo; 53 | } 54 | 55 | public String getAutor() { 56 | return autor; 57 | } 58 | 59 | public int getAno() { 60 | return ano; 61 | } 62 | } 63 | 64 | // Classe para comparar Livro por autor 65 | class CompararAutor implements Comparator { 66 | @Override 67 | public int compare(Livro l1, Livro l2) { 68 | return l1.getAutor().compareTo(l2.getAutor()); 69 | } 70 | } 71 | 72 | // Classe para comparar Livro por ano 73 | class CompararAno implements Comparator { 74 | @Override 75 | public int compare(Livro l1, Livro l2) { 76 | if (l1.getAno() < l2.getAno()) 77 | return -1; 78 | if (l1.getAno() > l2.getAno()) 79 | return 1; 80 | else 81 | return 0; 82 | } 83 | } 84 | 85 | class CompararAnoAutorTitulo implements Comparator { 86 | @Override 87 | public int compare(Livro l1, Livro l2) { 88 | int ano = Integer.compare(l1.getAno(), l2.getAno()); 89 | if (ano != 0) 90 | return ano; 91 | int autor = l1.getAutor().compareTo(l2.getAutor()); 92 | if (autor != 0) 93 | return autor; 94 | return l1.getTitulo().compareTo(l2.getTitulo()); 95 | } 96 | } 97 | ``` 98 | --- 99 | 100 | ### Livros citados: 101 | 102 | - ✨ Entendendo Algoritmos: Um Guia Ilustrado Para Programadores e Outros Curiosos - https://amzn.to/3IVsZRM 103 | - ✨ Microsserviços Prontos Para a Produção: Construindo Sistemas Padronizados em uma Organização de Engenharia de Software - https://amzn.to/3oOUkyb 104 | - ✨ Java - Guia do Programador: Atualizado Para Java 16 - https://amzn.to/3oJPanf 105 | - ✨ Microsserviços Prontos Para a Produção: Construindo Sistemas Padronizados em uma Organização de Engenharia de Software - https://amzn.to/3MOMVHf 106 | - ✨ Kotlin em ação - https://amzn.to/3MFyncM 107 | 108 | --- 109 | 110 | ### Referências: 111 | 112 | [1] "Comparable vs Comparator in Java." GeeksforGeeks. Disponível em: https://www.geeksforgeeks.org/comparable-vs-comparator-in-java/. 113 | 114 | [2] "Difference between Comparable and Comparator in Java." JavaTpoint. Disponível em: https://www.javatpoint.com/difference-between-comparable-and-comparator. 115 | 116 | [3] "Java™ Platform, Standard Edition 17 API Specification - Class Collections." Oracle. Disponível em: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collections.html. 117 | 118 | --- 119 | 120 | ### Dúvidas e Suporte 121 | 122 | Caso você tenha alguma dúvida, problema ou sugestão, fique à vontade para abrir uma issue no repositório. Espero conseguir te ajudar! (: 123 | -------------------------------------------------------------------------------- /src/main/java/generics/GenericsExempleList.java: -------------------------------------------------------------------------------- 1 | package main.java.generics; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class GenericsExempleList { 7 | public static void main(String[] args) { 8 | // Exemplo sem Generics 9 | List listaSemGenerics = new ArrayList(); 10 | listaSemGenerics.add("Elemento 1"); 11 | listaSemGenerics.add(10); // Permite adicionar qualquer tipo de objeto 12 | 13 | // Exemplo com Generics 14 | List listaGenerics = new ArrayList<>(); 15 | listaGenerics.add("Elemento 1"); 16 | listaGenerics.add("Elemento 2"); 17 | 18 | // Iterando sobre a lista com Generics 19 | for (String elemento : listaGenerics) { 20 | System.out.println(elemento); 21 | } 22 | 23 | // Iterando sobre a lista sem Generics (necessário fazer cast) 24 | for (Object elemento : listaSemGenerics) { 25 | String str = (String) elemento; 26 | System.out.println(str); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/generics/GenericsExempleMap.java: -------------------------------------------------------------------------------- 1 | package main.java.generics; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class GenericsExempleMap { 7 | public static void main(String[] args) { 8 | // Exemplo sem Generics 9 | Map mapaSemGenerics = new HashMap(); 10 | mapaSemGenerics.put("Chave 1", 10); 11 | mapaSemGenerics.put("Chave 2", "valor"); // Permite adicionar qualquer tipo de objeto 12 | 13 | // Exemplo com Generics 14 | Map mapaGenerics = new HashMap<>(); 15 | mapaGenerics.put("Chave 1", 10); 16 | mapaGenerics.put("Chave 2", 20); 17 | 18 | // Iterando sobre o mapa com Generics 19 | for (Map.Entry entry : mapaGenerics.entrySet()) { 20 | String chave = entry.getKey(); 21 | int valor = entry.getValue(); 22 | System.out.println("Chave: " + chave + ", Valor: " + valor); 23 | } 24 | 25 | // Iterando sobre o mapa sem Generics (necessário fazer cast) 26 | for (Object obj : mapaSemGenerics.entrySet()) { 27 | Map.Entry entry = (Map.Entry) obj; 28 | String chave = (String) entry.getKey(); 29 | Object valor = entry.getValue(); 30 | System.out.println("Chave: " + chave + ", Valor: " + valor); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/generics/GenericsExempleSet.java: -------------------------------------------------------------------------------- 1 | package main.java.generics; 2 | 3 | import java.util.HashSet; 4 | import java.util.Set; 5 | 6 | public class GenericsExempleSet { 7 | public static void main(String[] args) { 8 | // Exemplo sem Generics 9 | Set conjuntoSemGenerics = new HashSet(); 10 | conjuntoSemGenerics.add("Elemento 1"); 11 | conjuntoSemGenerics.add(10); // Permite adicionar qualquer tipo de objeto 12 | 13 | // Exemplo com Generics 14 | Set conjuntoGenerics = new HashSet<>(); 15 | conjuntoGenerics.add("Elemento 1"); 16 | conjuntoGenerics.add("Elemento 2"); 17 | 18 | // Iterando sobre o conjunto com Generics 19 | for (String elemento : conjuntoGenerics) { 20 | System.out.println(elemento); 21 | } 22 | 23 | // Iterando sobre o conjunto sem Generics (necessário fazer cast) 24 | for (Object elemento : conjuntoSemGenerics) { 25 | String str = (String) elemento; 26 | System.out.println(str); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/generics/README.md: -------------------------------------------------------------------------------- 1 | # Generics Type 2 | 3 | - Um tipo genérico é uma classe genérica ou uma interface que é parametrizada em relação a tipos. 4 | - A classe `Box` a seguir será modificada para demonstrar o conceito: 5 | 6 | ```java 7 | public class Box { 8 | private Object object; 9 | 10 | public void set(Object object) { this.object = object; } 11 | public Object get() { return object; } 12 | } 13 | ``` 14 | 15 | - O símbolo `<>` é chamado de "diamond" ou "diamond operator" foi um recurso introduzido no Java 7 e é usado no contexto de tipos genéricos em Java para inferir automaticamente o tipo com base no contexto. 16 | - Para atualizar a classe `Box` para usar generics, você cria uma declaração de tipo genérico alterando o código `public class Box` para `public class Box`. 17 | - Isso introduz a variável de tipo, `T`, que pode ser usada em qualquer lugar dentro da classe: 18 | 19 | ```java 20 | /** 21 | Versão genérica da classe Box. 22 | @param o tipo do valor sendo armazenado 23 | */ 24 | public class Box { 25 | // T representa "Type" (tipo) 26 | private T t; 27 | 28 | public void set(T t) { this.t = t; } 29 | public T get() { return t; } 30 | } 31 | ``` 32 | 33 | - Como você pode ver, todas as ocorrências de Object são substituídas por T. 34 | - Uma variável de tipo pode ser qualquer tipo não primitivo que você especificar: qualquer tipo de classe, qualquer tipo de interface, qualquer tipo de array ou até mesmo outra variável de tipo. 35 | - Essa mesma técnica pode ser aplicada para criar interfaces genérica. 36 | - Os nomes de parâmetros de tipo mais comumente usados são: 37 | - E - Elemento (usado extensivamente pelo Java Collections Framework) 38 | - K - Chave 39 | - N - Número 40 | - T - Tipo 41 | - V - Valor 42 | - S, U, V, etc. - 2º, 3º, 4º tipos 43 | 44 | ### Vantagens simples de usar generics nas interfaces Collection em Java: 45 | 46 | 1. Segurança do tipo de dados: O uso de generics garante que apenas objetos de um tipo específico possam ser adicionados à coleção, evitando erros de tipo e garantindo que você esteja lidando com os dados corretos. 47 | 2. Código mais legível: Ao usar generics, você pode especificar o tipo de dados esperado ou retornado pela coleção, o que torna o código mais fácil de entender e ler. 48 | 3. Detecta erros mais cedo: O compilador verifica se você está usando os tipos corretos durante a compilação, ajudando a identificar erros de tipo antes mesmo de executar o programa. 49 | 4. Reutilização de código: Com generics, você pode criar classes e métodos genéricos que funcionam com diferentes tipos de coleções, evitando a necessidade de duplicar código para cada tipo específico. 50 | 5. Melhor desempenho: O uso de generics pode melhorar o desempenho, pois evita a necessidade de conversões de tipo desnecessárias e permite que o compilador otimize o código com base no tipo especificado. 51 | 52 | --- 53 | 54 | ### Referências: 55 | 56 | [1] "Java Tutorials - Generics - Generic Types." Oracle. Disponível em: https://docs.oracle.com/javase/tutorial/java/generics/types.html. 57 | 58 | --- 59 | 60 | ### Dúvidas e Suporte 61 | 62 | Caso você tenha alguma dúvida, problema ou sugestão, fique à vontade para abrir uma issue no repositório. Espero conseguir te ajudar! (: -------------------------------------------------------------------------------- /src/main/java/list/OperacoesBasicas/CarrinhoDeCompras.java: -------------------------------------------------------------------------------- 1 | package main.java.list.OperacoesBasicas; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class CarrinhoDeCompras { 7 | //atributos 8 | private List itemList; 9 | 10 | public CarrinhoDeCompras() { 11 | this.itemList = new ArrayList<>(); 12 | } 13 | 14 | public void adicionarItem(String nome, double preco, int quantidade) { 15 | Item item = new Item(nome, preco, quantidade); 16 | this.itemList.add(item); 17 | } 18 | 19 | public void removerItem(String nome) { 20 | List itensParaRemover = new ArrayList<>(); 21 | if (!itemList.isEmpty()) { 22 | for (Item i : itemList) { 23 | if (i.getNome().equalsIgnoreCase(nome)) { 24 | itensParaRemover.add(i); 25 | } 26 | } 27 | itemList.removeAll(itensParaRemover); 28 | } else { 29 | System.out.println("A lista está vazia!"); 30 | } 31 | } 32 | 33 | public double calcularValorTotal() { 34 | double valorTotal = 0d; 35 | if (!itemList.isEmpty()) { 36 | for (Item item : itemList) { 37 | double valorItem = item.getPreco() * item.getQuant(); 38 | valorTotal += valorItem; //valorTotal = valorTotal + valorItem; 39 | } 40 | return valorTotal; 41 | } else { 42 | throw new RuntimeException("A lista está vazia!"); 43 | } 44 | } 45 | 46 | public void exibirItens() { 47 | if (!itemList.isEmpty()) { 48 | System.out.println(this.itemList); 49 | } else { 50 | System.out.println("A lista está vazia!"); 51 | } 52 | } 53 | 54 | @Override 55 | public String toString() { 56 | return "CarrinhoDeCompras{" + 57 | "itens=" + itemList + 58 | '}'; 59 | } 60 | 61 | public static void main(String[] args) { 62 | // Criando uma instância do carrinho de compras 63 | CarrinhoDeCompras carrinhoDeCompras = new CarrinhoDeCompras(); 64 | 65 | // Adicionando itens ao carrinho 66 | carrinhoDeCompras.adicionarItem("Lápis", 2d, 3); 67 | carrinhoDeCompras.adicionarItem("Lápis", 2d, 3); 68 | carrinhoDeCompras.adicionarItem("Caderno", 35d, 1); 69 | carrinhoDeCompras.adicionarItem("Borracha", 2d, 2); 70 | 71 | // Exibindo os itens no carrinho 72 | carrinhoDeCompras.exibirItens(); 73 | 74 | // Removendo um item do carrinho 75 | carrinhoDeCompras.removerItem("Lápis"); 76 | 77 | // Exibindo os itens atualizados no carrinho 78 | carrinhoDeCompras.exibirItens(); 79 | 80 | // Calculando e exibindo o valor total da compra 81 | System.out.println("O valor total da compra é = " + carrinhoDeCompras.calcularValorTotal()); 82 | } 83 | } -------------------------------------------------------------------------------- /src/main/java/list/OperacoesBasicas/Item.java: -------------------------------------------------------------------------------- 1 | package main.java.list.OperacoesBasicas; 2 | 3 | public class Item { 4 | //atributos 5 | private String nome; 6 | private double preco; 7 | private int quant; 8 | 9 | public Item(String nome, double preco, int quant) { 10 | this.nome = nome; 11 | this.preco = preco; 12 | this.quant = quant; 13 | } 14 | 15 | public String getNome() { 16 | return nome; 17 | } 18 | 19 | public double getPreco() { 20 | return preco; 21 | } 22 | 23 | public int getQuant() { 24 | return quant; 25 | } 26 | 27 | @Override 28 | public String toString() { 29 | return "Item{" + 30 | "nome='" + nome + '\'' + 31 | ", preco=" + preco + 32 | ", quant=" + quant + 33 | '}'; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/list/OperacoesBasicas/ListaTarefa.java: -------------------------------------------------------------------------------- 1 | package main.java.list.OperacoesBasicas; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class ListaTarefa { 7 | //atributo 8 | private List tarefaList; 9 | 10 | public ListaTarefa() { 11 | this.tarefaList = new ArrayList<>(); 12 | } 13 | 14 | public void adicionarTarefa(String descricao) { 15 | tarefaList.add(new Tarefa(descricao)); 16 | } 17 | 18 | public void removerTarefa(String descricao) { 19 | List tarefasParaRemover = new ArrayList<>(); 20 | if (!tarefaList.isEmpty()) { 21 | for (Tarefa t : tarefaList) { 22 | if (t.getDescricao().equalsIgnoreCase(descricao)) { 23 | tarefasParaRemover.add(t); 24 | } 25 | } 26 | tarefaList.removeAll(tarefasParaRemover); 27 | } else { 28 | System.out.println("A lista está vazia!"); 29 | } 30 | } 31 | 32 | public int obterNumeroTotalTarefas() { 33 | return tarefaList.size(); 34 | } 35 | 36 | public void obterDescricoesTarefas() { 37 | if (!tarefaList.isEmpty()) { 38 | System.out.println(tarefaList); 39 | } else { 40 | System.out.println("A lista está vazia!"); 41 | } 42 | } 43 | 44 | public static void main(String[] args) { 45 | // Criando uma instância da classe ListaTarefa 46 | ListaTarefa listaTarefa = new ListaTarefa(); 47 | 48 | // Adicionando tarefas à lista 49 | listaTarefa.adicionarTarefa("Comprar leite"); 50 | listaTarefa.adicionarTarefa("Estudar para o exame"); 51 | listaTarefa.adicionarTarefa("Fazer exercícios"); 52 | 53 | // Exibindo o número total de tarefas na lista 54 | System.out.println("Você tem " + listaTarefa.obterNumeroTotalTarefas() + " tarefas na lista:"); 55 | 56 | // Exibindo as descrições das tarefas na lista 57 | listaTarefa.obterDescricoesTarefas(); 58 | 59 | // Removendo uma tarefa da lista 60 | listaTarefa.removerTarefa("Trabalhar"); 61 | 62 | // Exibindo o número total de tarefas na lista após a remoção 63 | System.out.println("Agora você tem " + listaTarefa.obterNumeroTotalTarefas() + " tarefas na lista:"); 64 | 65 | // Exibindo as descrições das tarefas atualizadas na lista 66 | listaTarefa.obterDescricoesTarefas(); 67 | 68 | // Removendo uma tarefa da lista quando a lista está vazia 69 | listaTarefa.removerTarefa("Estudar para o exame"); 70 | 71 | // Exibindo o número total de tarefas na lista após tentar remover de uma lista vazia 72 | System.out.println("Agora você tem " + listaTarefa.obterNumeroTotalTarefas() + " tarefas na lista:"); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/list/OperacoesBasicas/Tarefa.java: -------------------------------------------------------------------------------- 1 | package main.java.list.OperacoesBasicas; 2 | 3 | public class Tarefa { 4 | //atributo 5 | private String descricao; 6 | 7 | public Tarefa(String descricao) { 8 | this.descricao = descricao; 9 | } 10 | 11 | public String getDescricao() { 12 | return descricao; 13 | } 14 | 15 | @Override 16 | public String toString() { 17 | return descricao; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/list/Ordenacao/OrdenacaoNumeros.java: -------------------------------------------------------------------------------- 1 | package main.java.list.Ordenacao; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Collections; 5 | import java.util.List; 6 | 7 | public class OrdenacaoNumeros { 8 | //atributos 9 | private List numerosList; 10 | 11 | //construtor 12 | public OrdenacaoNumeros() { 13 | this.numerosList = new ArrayList<>(); 14 | } 15 | 16 | public void adicionarNumero(int numero) { 17 | this.numerosList.add(numero); 18 | } 19 | 20 | public List ordenarAscendente() { 21 | List numerosAscendente = new ArrayList<>(this.numerosList); 22 | if (!numerosList.isEmpty()) { 23 | Collections.sort(numerosAscendente); 24 | return numerosAscendente; 25 | } else { 26 | throw new RuntimeException("A lista está vazia!"); 27 | } 28 | } 29 | 30 | public List ordenarDescendente() { 31 | List numerosAscendente = new ArrayList<>(this.numerosList); 32 | if (!numerosList.isEmpty()) { 33 | numerosAscendente.sort(Collections.reverseOrder()); 34 | return numerosAscendente; 35 | } else { 36 | throw new RuntimeException("A lista está vazia!"); 37 | } 38 | } 39 | 40 | public void exibirNumeros() { 41 | if (!numerosList.isEmpty()) { 42 | System.out.println(this.numerosList); 43 | } else { 44 | System.out.println("A lista está vazia!"); 45 | } 46 | } 47 | 48 | public static void main(String[] args) { 49 | // Criando uma instância da classe OrdenacaoNumeros 50 | OrdenacaoNumeros numeros = new OrdenacaoNumeros(); 51 | 52 | // Adicionando números à lista 53 | numeros.adicionarNumero(2); 54 | numeros.adicionarNumero(5); 55 | numeros.adicionarNumero(4); 56 | numeros.adicionarNumero(1); 57 | numeros.adicionarNumero(99); 58 | 59 | // Exibindo a lista de números adicionados 60 | numeros.exibirNumeros(); 61 | 62 | // Ordenando e exibindo em ordem ascendente 63 | System.out.println(numeros.ordenarAscendente()); 64 | 65 | // Exibindo a lista 66 | numeros.exibirNumeros(); 67 | 68 | // Ordenando e exibindo em ordem descendente 69 | System.out.println(numeros.ordenarDescendente()); 70 | 71 | // Exibindo a lista 72 | numeros.exibirNumeros(); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/main/java/list/Ordenacao/OrdenacaoPessoas.java: -------------------------------------------------------------------------------- 1 | package main.java.list.Ordenacao; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Collections; 5 | import java.util.List; 6 | 7 | public class OrdenacaoPessoas { 8 | //atributo 9 | private List pessoaList; 10 | 11 | public OrdenacaoPessoas() { 12 | this.pessoaList = new ArrayList<>(); 13 | } 14 | 15 | public void adicionarPessoa(String nome, int idade, double altura) { 16 | pessoaList.add(new Pessoa(nome, idade, altura)); 17 | } 18 | 19 | public List ordenarPorIdade() { 20 | List pessoasPorIdade = new ArrayList<>(pessoaList); 21 | if (!pessoaList.isEmpty()) { 22 | Collections.sort(pessoasPorIdade); 23 | return pessoasPorIdade; 24 | } else { 25 | throw new RuntimeException("A lista está vazia!"); 26 | } 27 | } 28 | 29 | public List ordenarPorAltura() { 30 | List pessoasPorAltura = new ArrayList<>(pessoaList); 31 | if (!pessoaList.isEmpty()) { 32 | Collections.sort(pessoasPorAltura, new ComparatorPorAltura()); 33 | return pessoasPorAltura; 34 | } else { 35 | throw new RuntimeException("A lista está vazia!"); 36 | } 37 | } 38 | 39 | public static void main(String[] args) { 40 | // Criando uma instância da classe OrdenacaoPessoas 41 | OrdenacaoPessoas ordenacaoPessoas = new OrdenacaoPessoas(); 42 | 43 | // Adicionando pessoas à lista 44 | ordenacaoPessoas.adicionarPessoa("Alice", 20, 1.56); 45 | ordenacaoPessoas.adicionarPessoa("Bob", 30, 1.80); 46 | ordenacaoPessoas.adicionarPessoa("Charlie", 25, 1.70); 47 | ordenacaoPessoas.adicionarPessoa("David", 17, 1.56); 48 | 49 | // Exibindo a lista de pessoas adicionadas 50 | System.out.println(ordenacaoPessoas.pessoaList); 51 | 52 | // Ordenando e exibindo por idade 53 | System.out.println(ordenacaoPessoas.ordenarPorIdade()); 54 | 55 | // Ordenando e exibindo por altura 56 | System.out.println(ordenacaoPessoas.ordenarPorAltura()); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/list/Ordenacao/Pessoa.java: -------------------------------------------------------------------------------- 1 | package main.java.list.Ordenacao; 2 | 3 | import java.util.Comparator; 4 | 5 | public class Pessoa implements Comparable { 6 | //atributos 7 | private String nome; 8 | private int idade; 9 | private double altura; 10 | 11 | public Pessoa(String nome, int idade, double altura) { 12 | this.nome = nome; 13 | this.idade = idade; 14 | this.altura = altura; 15 | } 16 | 17 | @Override 18 | public int compareTo(Pessoa p) { 19 | return Integer.compare(idade, p.getIdade()); 20 | } 21 | 22 | public String getNome() { 23 | return nome; 24 | } 25 | 26 | public int getIdade() { 27 | return idade; 28 | } 29 | 30 | public double getAltura() { 31 | return altura; 32 | } 33 | 34 | @Override 35 | public String toString() { 36 | return "Pessoa{" + 37 | "nome='" + nome + '\'' + 38 | ", idade=" + idade + 39 | ", altura=" + altura + 40 | '}'; 41 | } 42 | } 43 | 44 | class ComparatorPorAltura implements Comparator { 45 | @Override 46 | public int compare(Pessoa p1, Pessoa p2) { 47 | return Double.compare(p1.getAltura(), p2.getAltura()); 48 | } 49 | } -------------------------------------------------------------------------------- /src/main/java/list/Pesquisa/CatalogoLivros.java: -------------------------------------------------------------------------------- 1 | package main.java.list.Pesquisa; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class CatalogoLivros { 7 | //atributo 8 | private List livroList; 9 | 10 | public CatalogoLivros() { 11 | this.livroList = new ArrayList<>(); 12 | } 13 | 14 | public void adicionarLivro(String titulo, String autor, int anoPublicacao) { 15 | livroList.add(new Livro(titulo, autor, anoPublicacao)); 16 | } 17 | 18 | public List pesquisarPorAutor(String autor) { 19 | List livrosPorAutor = new ArrayList<>(); 20 | if (!livroList.isEmpty()) { 21 | for (Livro l : livroList) { 22 | if (l.getAutor().equalsIgnoreCase(autor)) { 23 | livrosPorAutor.add(l); 24 | } 25 | } 26 | return livrosPorAutor; 27 | } else { 28 | throw new RuntimeException("A lista está vazia!"); 29 | } 30 | } 31 | 32 | public List pesquisarPorIntervaloAnos(int anoInicial, int anoFinal) { 33 | List livrosPorIntervaloAnos = new ArrayList<>(); 34 | if (!livroList.isEmpty()) { 35 | for (Livro l : livroList) { 36 | if (l.getAnoPublicacao() >= anoInicial && l.getAnoPublicacao() <= anoFinal) { 37 | livrosPorIntervaloAnos.add(l); 38 | } 39 | } 40 | return livrosPorIntervaloAnos; 41 | } else { 42 | throw new RuntimeException("A lista está vazia!"); 43 | } 44 | } 45 | 46 | public Livro pesquisarPorTitulo(String titulo) { 47 | Livro livroPorTitulo = null; 48 | if (!livroList.isEmpty()) { 49 | for (Livro l : livroList) { 50 | if (l.getTitulo().equalsIgnoreCase(titulo)) { 51 | livroPorTitulo = l; 52 | break; 53 | } 54 | } 55 | return livroPorTitulo; 56 | } else { 57 | throw new RuntimeException("A lista está vazia!"); 58 | } 59 | } 60 | 61 | public static void main(String[] args) { 62 | // Criando uma instância do catálogo de livros 63 | CatalogoLivros catalogoLivros = new CatalogoLivros(); 64 | 65 | // Adicionando livros ao catálogo 66 | catalogoLivros.adicionarLivro("Microsserviços Prontos Para a Produção", "Susan J. Fowler", 2017); 67 | catalogoLivros.adicionarLivro("Java Guia do Programador", "Peter Jandl Junior", 2021); 68 | catalogoLivros.adicionarLivro("Código Limpo", "Robert C. Martin", 2009); 69 | catalogoLivros.adicionarLivro("O Codificador Limpo", "Robert C. Martin", 2012); 70 | 71 | // Exibindo livros pelo mesmo autor 72 | System.out.println(catalogoLivros.pesquisarPorAutor("Robert C. Martin")); 73 | 74 | // Exibindo livros pelo mesmo autor (caso em que não há livros de um autor específico) 75 | System.out.println(catalogoLivros.pesquisarPorAutor("Autor Inexistente")); 76 | 77 | // Exibindo livros dentro de um intervalo de anos 78 | System.out.println(catalogoLivros.pesquisarPorIntervaloAnos(2010, 2022)); 79 | 80 | // Exibindo livros dentro de um intervalo de anos (caso em que não há livros no intervalo) 81 | System.out.println(catalogoLivros.pesquisarPorIntervaloAnos(2025, 2030)); 82 | 83 | // Exibindo livros por título 84 | System.out.println(catalogoLivros.pesquisarPorTitulo("Java Guia do Programador")); 85 | 86 | // Exibindo livros por título (caso em que não há livros com o título especificado) 87 | System.out.println(catalogoLivros.pesquisarPorTitulo("Título Inexistente")); 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /src/main/java/list/Pesquisa/Livro.java: -------------------------------------------------------------------------------- 1 | package main.java.list.Pesquisa; 2 | 3 | public class Livro { 4 | //atributos 5 | private String titulo; 6 | private String autor; 7 | private int anoPublicacao; 8 | 9 | public Livro(String titulo, String autor, int anoPublicacao) { 10 | this.titulo = titulo; 11 | this.autor = autor; 12 | this.anoPublicacao = anoPublicacao; 13 | } 14 | 15 | public String getTitulo() { 16 | return titulo; 17 | } 18 | 19 | public void setAutor(String autor) { 20 | this.autor = autor; 21 | } 22 | 23 | public String getAutor() { 24 | return autor; 25 | } 26 | 27 | public int getAnoPublicacao() { 28 | return anoPublicacao; 29 | } 30 | 31 | @Override 32 | public String toString() { 33 | return "Livro{" + 34 | "titulo='" + titulo + '\'' + 35 | ", autor='" + autor + '\'' + 36 | ", anoPublicacao=" + anoPublicacao + 37 | '}'; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/list/Pesquisa/SomaNumeros.java: -------------------------------------------------------------------------------- 1 | package main.java.list.Pesquisa; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class SomaNumeros { 7 | //atributos 8 | private List numeros; 9 | 10 | //construtor 11 | public SomaNumeros() { 12 | this.numeros = new ArrayList<>(); 13 | } 14 | 15 | public void adicionarNumero(int numero) { 16 | this.numeros.add(numero); 17 | } 18 | 19 | public int calcularSoma() { 20 | int soma = 0; 21 | for (Integer numero : numeros) 22 | soma += numero; 23 | return soma; 24 | } 25 | 26 | public int encontrarMaiorNumero() { 27 | int maiorNumero = Integer.MIN_VALUE; 28 | if (!numeros.isEmpty()) { 29 | for (Integer numero : numeros) { 30 | if (numero >= maiorNumero) { 31 | maiorNumero = numero; 32 | } 33 | } 34 | return maiorNumero; 35 | } else { 36 | throw new RuntimeException("A lista está vazia!"); 37 | } 38 | } 39 | 40 | public int encontrarMenorNumero() { 41 | int menorNumero = Integer.MAX_VALUE; 42 | if (!numeros.isEmpty()) { 43 | for (Integer numero : numeros) { 44 | if (numero <= menorNumero) { 45 | menorNumero = numero; 46 | } 47 | } 48 | return menorNumero; 49 | } else { 50 | throw new RuntimeException("A lista está vazia!"); 51 | } 52 | } 53 | 54 | public void exibirNumeros() { 55 | if (!numeros.isEmpty()) { 56 | System.out.println(this.numeros); 57 | } else { 58 | System.out.println("A lista está vazia!"); 59 | } 60 | } 61 | 62 | public static void main(String[] args) { 63 | // Criando uma instância da classe SomaNumeros 64 | SomaNumeros somaNumeros = new SomaNumeros(); 65 | 66 | // Adicionando números à lista 67 | somaNumeros.adicionarNumero(5); 68 | somaNumeros.adicionarNumero(0); 69 | somaNumeros.adicionarNumero(0); 70 | somaNumeros.adicionarNumero(-2); 71 | somaNumeros.adicionarNumero(10); 72 | 73 | // Exibindo a lista de números adicionados 74 | System.out.println("Números adicionados:"); 75 | somaNumeros.exibirNumeros(); 76 | 77 | // Calculando e exibindo a soma dos números na lista 78 | System.out.println("Soma dos números = " + somaNumeros.calcularSoma()); 79 | 80 | // Encontrando e exibindo o maior número na lista 81 | System.out.println("Maior número = " + somaNumeros.encontrarMaiorNumero()); 82 | 83 | // Encontrando e exibindo o menor número na lista 84 | System.out.println("Menor número = " + somaNumeros.encontrarMenorNumero()); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/main/java/list/README.md: -------------------------------------------------------------------------------- 1 | # List Interface 2 | 3 |

4 | List interface hierarchy Java
5 | Hierarchy of Collection Framework in Java 6 |

7 | 8 | - A interface List é uma coleção ordenada que permite a inclusão de elementos duplicados. 9 | - É um dos tipos de coleção mais utilizados em Java, e as classes de implementação comuns são ArrayList e LinkedList. 10 | - A List se assemelha a uma matriz com comprimento dinâmico, permitindo adicionar ou remover elementos. 11 | - A interface List fornece métodos úteis para adicionar elementos em posições específicas, remover ou substituir elementos com base no índice e obter sublistas usando índices. 12 | - A classe Collections fornece algoritmos úteis para manipulação de List, como ordenação (sort), embaralhamento (shuffle), reversão (reverse) e busca binária (binarySearch). 13 | 14 | > ##### *ArrayList*: O ArrayList é uma implementação da interface List que armazena os elementos em uma estrutura de array redimensionável. Isso significa que ele pode crescer automaticamente à medida que novos elementos são adicionados. A principal vantagem do ArrayList é o acesso rápido aos elementos por meio de índices, o que permite recuperar um elemento específico de forma eficiente. No entanto, adicionar ou remover elementos no meio da lista pode ser mais lento, pois requer a realocação de elementos. 15 | 16 | > ##### *LinkedList*: O LinkedList é uma implementação da interface List que armazena os elementos em uma lista duplamente vinculada. Cada elemento contém referências para o elemento anterior e próximo na lista. A principal vantagem do LinkedList é a eficiência na adição ou remoção de elementos no início ou no final da lista, pois não é necessário realocar elementos. No entanto, o acesso aos elementos por meio de índices é mais lento, pois requer percorrer a lista até o elemento desejado. 17 | 18 | > ##### *Vector*: O Vector é uma implementação antiga da interface List que é semelhante ao ArrayList, mas é sincronizada, ou seja, é thread-safe. Isso significa que várias threads podem manipular um objeto Vector ao mesmo tempo sem causar problemas de concorrência. No entanto, essa sincronização adiciona uma sobrecarga de desempenho, tornando o Vector menos eficiente do que o ArrayList em cenários em que a concorrência não é um problema. Por esse motivo, o uso do Vector é menos comum em aplicações modernas. 19 | 20 | ### Referências: 21 | 22 | [1] "Collections in Java Tutorial." DigitalOcean Community. Disponível em: https://www.digitalocean.com/community/tutorials/collections-in-java-tutorial. 23 | 24 | [2] "Java™ Platform, Standard Edition 17 API Specification - Class List." Oracle. Disponível em: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html. 25 | 26 | # Fixando os Conhecimentos 27 | 28 | Exercícios: 29 | 30 | 1. Operações Básicas com List 31 | 2. Pesquisa em List 32 | 3. Ordenação nas List 33 | 34 | ## Operações Básicas com List 35 | 36 | ### 1. Lista de Tarefas 37 |

Crie uma classe chamada "ListaTarefas" que possui uma lista de tarefas como atributo. Cada tarefa é representada por uma classe chamada "Tarefa" que possui um atributo de descrição. Implemente os seguintes métodos: 38 | 39 | - `adicionarTarefa(String descricao)`: Adiciona uma nova tarefa à lista com a descrição fornecida. 40 | - `removerTarefa(String descricao)`: Remove uma tarefa da lista com base em sua descrição. 41 | - `obterNumeroTotalTarefas()`: Retorna o número total de tarefas na lista. 42 | - `obterDescricoesTarefas()`: Retorna uma lista contendo a descrição de todas as tarefas na lista. 43 |

44 | 45 | ### 2. Carrinho de Compras: 46 | 47 |

Crie uma classe chamada "CarrinhoDeCompras" que representa um carrinho de compras online. O carrinho deve ser implementado como uma lista de itens. Cada item é representado por uma classe chamada "Item" que possui atributos como nome, preço e quantidade. Implemente os seguintes métodos: 48 | 49 | - `adicionarItem(String nome, double preco, int quantidade)`: Adiciona um item ao carrinho com o nome, preço e quantidade especificados. 50 | - `removerItem(String nome)`: Remove um item do carrinho com base no seu nome. 51 | - `calcularValorTotal()`: Calcula e retorna o valor total do carrinho, levando em consideração o preço e a quantidade de cada item. 52 | - `exibirItens()`: Exibe todos os itens presentes no carrinho, mostrando seus nomes, preços e quantidades. 53 |

54 | 55 | ---- 56 | 57 | ## Pesquisa em List 58 | 59 | ### 1. Catálogo de Livros 60 | 61 |

Crie uma classe chamada "CatalogoLivros" que possui uma lista de objetos do tipo "Livro" como atributo. Cada livro possui atributos como título, autor e ano de publicação. Implemente os seguintes métodos: 62 | 63 | - `adicionarLivro(String titulo, String autor, int anoPublicacao)`: Adiciona um livro ao catálogo. 64 | - `pesquisarPorAutor(String autor)`: Pesquisa livros por autor e retorna uma lista com os livros encontrados. 65 | - `pesquisarPorIntervaloAnos(int anoInicial, int anoFinal)`: Pesquisa livros publicados em um determinado intervalo de anos e retorna uma lista com os livros encontrados. 66 | - `pesquisarPorTitulo(String titulo)`: Pesquisa livros por título e retorna o primeiro livro encontrado. 67 |

68 | 69 | ### 2. Soma de Números 70 | 71 |

Crie uma classe chamada "SomaNumeros" que possui uma lista de números inteiros como atributo. Implemente os seguintes métodos: 72 | 73 | - `adicionarNumero(int numero)`: Adiciona um número à lista de números. 74 | - `calcularSoma()`: Calcula a soma de todos os números na lista e retorna o resultado. 75 | - `encontrarMaiorNumero()`: Encontra o maior número na lista e retorna o valor. 76 | - `encontrarMenorNumero()`: Encontra o menor número na lista e retorna o valor. 77 | - `exibirNumeros()`: Retorna uma lista contendo todos os números presentes na lista. 78 | 79 | ------- 80 | 81 | ## Ordenação em List 82 | 83 | ### 1. Ordenação de Pessoas 84 | 85 |

Crie uma classe chamada "OrdenacaoPessoas" que possui uma lista de objetos do tipo "Pessoa" como atributo. Cada pessoa possui atributos como nome, idade e altura. Implemente os seguintes métodos: 86 | 87 | - `adicionarPessoa(String nome, int idade, double altura)`: Adiciona uma pessoa à lista. 88 | - `ordenarPorIdade()`: Ordena as pessoas da lista por idade usando a interface Comparable. 89 | - `ordenarPorAltura()`: Ordena as pessoas da lista por altura usando um Comparator personalizado. 90 |

91 | 92 | ### 2. Ordenação de Números 93 | 94 |

Crie uma classe chamada "OrdenacaoNumeros" que possui uma lista de números inteiros como atributo. Implemente os seguintes métodos: 95 | 96 | - `adicionarNumero(int numero)`: Adiciona um número à lista. 97 | - `ordenarAscendente()`: Ordena os números da lista em ordem ascendente usando a interface Comparable e a class Collections. 98 | - `ordenarDescendente()`: Ordena os números da lista em ordem descendente usando um Comparable e a class Collections. 99 |

100 | 101 | --- 102 | ### Dúvidas e Suporte 103 | 104 | Caso você tenha alguma dúvida, problema ou sugestão, fique à vontade para abrir uma issue no repositório. Espero conseguir te ajudar! (: 105 | -------------------------------------------------------------------------------- /src/main/java/map/OperacoesBasicas/AgendaContatos.java: -------------------------------------------------------------------------------- 1 | package main.java.map.OperacoesBasicas; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class AgendaContatos { 7 | //atributo 8 | private Map agendaContatoMap; 9 | 10 | public AgendaContatos() { 11 | this.agendaContatoMap = new HashMap<>(); 12 | } 13 | 14 | public void adicionarContato(String nome, Integer telefone) { 15 | agendaContatoMap.put(nome, telefone); 16 | } 17 | 18 | public void removerContato(String nome) { 19 | if (!agendaContatoMap.isEmpty()) { 20 | agendaContatoMap.remove(nome); 21 | } else { 22 | System.out.println("A agenda de contatos está vazia."); 23 | } 24 | } 25 | 26 | public void exibirContatos() { 27 | if (!agendaContatoMap.isEmpty()) { 28 | System.out.println(agendaContatoMap); 29 | } else { 30 | System.out.println("A agenda de contatos está vazia."); 31 | } 32 | } 33 | 34 | public Integer pesquisarPorNome(String nome) { 35 | Integer numeroPorNome = null; 36 | if (!agendaContatoMap.isEmpty()) { 37 | numeroPorNome = agendaContatoMap.get(nome); 38 | if (numeroPorNome == null) { 39 | System.out.println("Contato não encontrado na agenda."); 40 | } 41 | } else { 42 | System.out.println("A agenda de contatos está vazia."); 43 | } 44 | return numeroPorNome; 45 | } 46 | 47 | public static void main(String[] args) { 48 | AgendaContatos agendaContatos = new AgendaContatos(); 49 | 50 | // Adicionar contatos 51 | agendaContatos.adicionarContato("Camila", 123456); 52 | agendaContatos.adicionarContato("João", 5665); 53 | agendaContatos.adicionarContato("Carlos", 1111111); 54 | agendaContatos.adicionarContato("Ana", 654987); 55 | agendaContatos.adicionarContato("Maria", 1111111); 56 | agendaContatos.adicionarContato("Camila", 44444); 57 | 58 | agendaContatos.exibirContatos(); 59 | 60 | // Remover um contato 61 | agendaContatos.removerContato("Maria"); 62 | agendaContatos.exibirContatos(); 63 | 64 | // Pesquisar número por nome 65 | String nomePesquisa = "João"; 66 | Integer numeroPesquisa = agendaContatos.pesquisarPorNome("João"); 67 | System.out.println("Número de telefone de " + nomePesquisa + ": " + numeroPesquisa); 68 | 69 | String nomePesquisaNaoExistente = "Paula"; 70 | Integer numeroPesquisaNaoExistente = agendaContatos.pesquisarPorNome(nomePesquisaNaoExistente); 71 | System.out.println("Número de telefone de " + nomePesquisaNaoExistente + ": " + numeroPesquisaNaoExistente); 72 | } 73 | } -------------------------------------------------------------------------------- /src/main/java/map/OperacoesBasicas/Dicionario.java: -------------------------------------------------------------------------------- 1 | package main.java.map.OperacoesBasicas; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class Dicionario { 7 | private Map dicionario; 8 | 9 | public Dicionario() { 10 | this.dicionario = new HashMap<>(); 11 | } 12 | 13 | public void adicionarPalavra(String palavra, String definicao) { 14 | dicionario.put(palavra, definicao); 15 | } 16 | 17 | public void removerPalavra(String palavra) { 18 | if (!dicionario.isEmpty()) { 19 | dicionario.remove(palavra); 20 | } else { 21 | System.out.println("O dicionário está vazio."); 22 | } 23 | } 24 | 25 | public String pesquisarPorPalavra(String palavra) { 26 | String definicao = dicionario.get(palavra); 27 | if (definicao != null) { 28 | return definicao; 29 | } 30 | return "Linguagem não encontrada no dicionário."; 31 | } 32 | 33 | public void exibirPalavras() { 34 | if (!dicionario.isEmpty()) { 35 | System.out.println(dicionario); 36 | } else { 37 | System.out.println("O dicionário está vazio."); 38 | } 39 | } 40 | 41 | public static void main(String[] args) { 42 | Dicionario dicionario = new Dicionario(); 43 | 44 | // Adicionar palavras (linguagens de programação) 45 | dicionario.adicionarPalavra("java", "Linguagem de programação orientada a objetos."); 46 | dicionario.adicionarPalavra("typescript", "Superset da linguagem JavaScript que adiciona tipagem estática."); 47 | dicionario.adicionarPalavra("kotlin", "Linguagem moderna de programação para a JVM."); 48 | 49 | // Exibir todas as palavras 50 | dicionario.exibirPalavras(); 51 | 52 | // Pesquisar palavras 53 | String definicaoJava = dicionario.pesquisarPorPalavra("java"); 54 | System.out.println("Definição da linguagem 'java': " + definicaoJava); 55 | 56 | String definicaoCSharp = dicionario.pesquisarPorPalavra("csharp"); 57 | System.out.println(definicaoCSharp); 58 | 59 | // Remover uma palavra 60 | dicionario.removerPalavra("typescript"); 61 | dicionario.exibirPalavras(); 62 | } 63 | } -------------------------------------------------------------------------------- /src/main/java/map/Ordenacao/AgendaEventos.java: -------------------------------------------------------------------------------- 1 | package main.java.map.Ordenacao; 2 | 3 | import java.time.LocalDate; 4 | import java.time.Month; 5 | import java.util.*; 6 | 7 | public class AgendaEventos { 8 | private Map eventosMap; 9 | 10 | public AgendaEventos() { 11 | this.eventosMap = new HashMap<>(); 12 | } 13 | 14 | public void adicionarEvento(LocalDate data, String nomeEvento, String descricaoAtracao) { 15 | eventosMap.put(data, new Evento(nomeEvento, descricaoAtracao)); 16 | } 17 | 18 | public void exibirAgenda() { 19 | Map eventosTreeMap = new TreeMap<>(eventosMap); 20 | for (Map.Entry entry : eventosTreeMap.entrySet()) { 21 | LocalDate dataEvento = entry.getKey(); 22 | Evento evento = entry.getValue(); 23 | System.out.println("Data: " + dataEvento + ", Evento: " + evento.getNome() + ", Atração: " + evento.getAtracao()); 24 | } 25 | } 26 | 27 | public void obterProximoEvento() { 28 | LocalDate dataAtual = LocalDate.now(); 29 | LocalDate proximaData = null; 30 | Evento proximoEvento = null; 31 | for (Map.Entry entry : eventosMap.entrySet()) { 32 | LocalDate dataEvento = entry.getKey(); 33 | if (dataEvento.isEqual(dataAtual) || dataEvento.isAfter(dataAtual)) { 34 | proximaData = dataEvento; 35 | proximoEvento = entry.getValue(); 36 | break; 37 | } 38 | } 39 | if (proximoEvento != null) { 40 | System.out.println("O próximo evento: " + proximoEvento.getNome() + " acontecerá na data " + proximaData); 41 | } else { 42 | System.out.println("Não há eventos futuros na agenda."); 43 | } 44 | } 45 | 46 | public static void main(String[] args) { 47 | AgendaEventos agendaEventos = new AgendaEventos(); 48 | 49 | // Adiciona eventos à agenda 50 | agendaEventos.adicionarEvento(LocalDate.of(2022, Month.JULY, 15), "Conferência de Tecnologia", "Palestrante renomado"); 51 | agendaEventos.adicionarEvento(LocalDate.of(2022, 7, 9), "Workshop de Programação", "Aula prática de desenvolvimento"); 52 | agendaEventos.adicionarEvento(LocalDate.of(2000, 1, 10), "Lançamento de Software", "Demonstração da nova versão"); 53 | agendaEventos.adicionarEvento(LocalDate.of(2023, Month.AUGUST, 28), "Hackathon de Inovação", "Competição de soluções criativas"); 54 | agendaEventos.adicionarEvento(LocalDate.of(2024, 9, 20), "Seminário de Inteligência Artificial", "Discussão sobre IA avançada"); 55 | 56 | // Exibe a agenda completa de eventos 57 | agendaEventos.exibirAgenda(); 58 | 59 | // Obtém e exibe o próximo evento na agenda 60 | agendaEventos.obterProximoEvento(); 61 | } 62 | } -------------------------------------------------------------------------------- /src/main/java/map/Ordenacao/Evento.java: -------------------------------------------------------------------------------- 1 | package main.java.map.Ordenacao; 2 | 3 | public class Evento { 4 | //atributos 5 | private String nome; 6 | private String atracao; 7 | 8 | public Evento(String nome, String atracao) { 9 | this.nome = nome; 10 | this.atracao = atracao; 11 | } 12 | 13 | public String getNome() { 14 | return nome; 15 | } 16 | 17 | public String getAtracao() { 18 | return atracao; 19 | } 20 | 21 | @Override 22 | public String toString() { 23 | return "Evento{" + 24 | "nome='" + nome + '\'' + 25 | ", atracao=" + atracao + 26 | '}'; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/map/Ordenacao/LivrariaOnline.java: -------------------------------------------------------------------------------- 1 | package main.java.map.Ordenacao; 2 | 3 | import java.util.*; 4 | 5 | public class LivrariaOnline { 6 | private Map livros; 7 | 8 | public LivrariaOnline() { 9 | this.livros = new HashMap<>(); 10 | } 11 | 12 | public void adicionarLivro(String link, Livro livro) { 13 | livros.put(link, livro); 14 | } 15 | 16 | public void removerLivro(String titulo) { 17 | List chavesRemover = new ArrayList<>(); 18 | for (Map.Entry entry : livros.entrySet()) { 19 | if (entry.getValue().getTitulo().equalsIgnoreCase(titulo)) { 20 | chavesRemover.add(entry.getKey()); 21 | } 22 | } 23 | for (String chave : chavesRemover) { 24 | livros.remove(chave); 25 | } 26 | } 27 | 28 | public Map exibirLivrosOrdenadosPorPreco() { 29 | List> livrosParaOrdenarPorPreco = new ArrayList<>(livros.entrySet()); 30 | 31 | Collections.sort(livrosParaOrdenarPorPreco, new ComparatorPorPreco()); 32 | 33 | Map livrosOrdenadosPorPreco = new LinkedHashMap<>(); 34 | 35 | for (Map.Entry entry : livrosParaOrdenarPorPreco) { 36 | livrosOrdenadosPorPreco.put(entry.getKey(), entry.getValue()); 37 | } 38 | 39 | return livrosOrdenadosPorPreco; 40 | } 41 | 42 | public Map exibirLivrosOrdenadosPorAutor() { 43 | List> livrosParaOrdenarPorAutor = new ArrayList<>(livros.entrySet()); 44 | 45 | Collections.sort(livrosParaOrdenarPorAutor, new ComparatorPorAutor()); 46 | 47 | Map livrosOrdenadosPorAutor = new LinkedHashMap<>(); 48 | 49 | for (Map.Entry entry : livrosParaOrdenarPorAutor) { 50 | livrosOrdenadosPorAutor.put(entry.getKey(), entry.getValue()); 51 | } 52 | 53 | return livrosOrdenadosPorAutor; 54 | } 55 | 56 | public Map pesquisarLivrosPorAutor(String autor) { 57 | Map livrosPorAutor = new LinkedHashMap<>(); 58 | for (Map.Entry entry : livros.entrySet()) { 59 | Livro livro = entry.getValue(); 60 | if (livro.getAutor().equals(autor)) { 61 | livrosPorAutor.put(entry.getKey(), livro); 62 | } 63 | } 64 | return livrosPorAutor; 65 | } 66 | 67 | public List obterLivroMaisCaro() { 68 | List livrosMaisCaros = new ArrayList<>(); 69 | double precoMaisAlto = Double.MIN_VALUE; 70 | 71 | if (!livros.isEmpty()) { 72 | for (Livro livro : livros.values()) { 73 | if (livro.getPreco() > precoMaisAlto) { 74 | precoMaisAlto = livro.getPreco(); 75 | } 76 | } 77 | } else { 78 | throw new NoSuchElementException("A livraria está vazia!"); 79 | } 80 | 81 | for(Map.Entry entry: livros.entrySet()) { 82 | if(entry.getValue().getPreco() == precoMaisAlto) { 83 | Livro livroComPrecoMaisAlto = livros.get(entry.getKey()); 84 | livrosMaisCaros.add(livroComPrecoMaisAlto); 85 | } 86 | } 87 | return livrosMaisCaros; 88 | } 89 | 90 | public List obterLivroMaisBarato() { 91 | List livrosMaisBaratos = new ArrayList<>(); 92 | double precoMaisBaixo = Double.MAX_VALUE; 93 | 94 | if (!livros.isEmpty()) { 95 | for (Livro livro : livros.values()) { 96 | if (livro.getPreco() < precoMaisBaixo) { 97 | precoMaisBaixo = livro.getPreco(); 98 | } 99 | } 100 | } else { 101 | throw new NoSuchElementException("A livraria está vazia!"); 102 | } 103 | 104 | for(Map.Entry entry: livros.entrySet()) { 105 | if(entry.getValue().getPreco() == precoMaisBaixo) { 106 | Livro livroComPrecoMaisBaixo = livros.get(entry.getKey()); 107 | livrosMaisBaratos.add(livroComPrecoMaisBaixo); 108 | } 109 | } 110 | return livrosMaisBaratos; 111 | } 112 | 113 | public static void main(String[] args) { 114 | LivrariaOnline livrariaOnline = new LivrariaOnline(); 115 | // Adiciona os livros à livraria online 116 | livrariaOnline.adicionarLivro("https://amzn.to/3EclT8Z", new Livro("1984", "George Orwell", 50d)); 117 | livrariaOnline.adicionarLivro("https://amzn.to/47Umiun", new Livro("A Revolução dos Bichos", "George Orwell", 7.05d)); 118 | livrariaOnline.adicionarLivro("https://amzn.to/3L1FFI6", new Livro("Caixa de Pássaros - Bird Box: Não Abra os Olhos", "Josh Malerman", 19.99d)); 119 | livrariaOnline.adicionarLivro("https://amzn.to/3OYb9jk", new Livro("Malorie", "Josh Malerman", 5d)); 120 | livrariaOnline.adicionarLivro("https://amzn.to/45HQE1L", new Livro("E Não Sobrou Nenhum", "Agatha Christie", 50d)); 121 | livrariaOnline.adicionarLivro("https://amzn.to/45u86q4", new Livro("Assassinato no Expresso do Oriente", "Agatha Christie", 5d)); 122 | 123 | // Exibe todos os livros ordenados por preço 124 | System.out.println("Livros ordenados por preço: \n" + livrariaOnline.exibirLivrosOrdenadosPorPreco()); 125 | 126 | //Exibe todos os livros ordenados por autor 127 | System.out.println("Livros ordenados por autor: \n" + livrariaOnline.exibirLivrosOrdenadosPorAutor()); 128 | 129 | // Pesquisa livros por autor 130 | String autorPesquisa = "Josh Malerman"; 131 | livrariaOnline.pesquisarLivrosPorAutor(autorPesquisa); 132 | 133 | // Obtém e exibe o livro mais caro 134 | System.out.println("Livro mais caro: " + livrariaOnline.obterLivroMaisCaro()); 135 | 136 | // Obtém e exibe o livro mais barato 137 | System.out.println("Livro mais barato: " + livrariaOnline.obterLivroMaisBarato()); 138 | 139 | // Remover um livro pelo título 140 | livrariaOnline.removerLivro("1984"); 141 | System.out.println(livrariaOnline.livros); 142 | 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /src/main/java/map/Ordenacao/Livro.java: -------------------------------------------------------------------------------- 1 | package main.java.map.Ordenacao; 2 | 3 | import java.util.Comparator; 4 | import java.util.Map; 5 | 6 | public class Livro { 7 | private String titulo; 8 | private String autor; 9 | private double preco; 10 | 11 | public Livro(String titulo, String autor, double preco) { 12 | this.titulo = titulo; 13 | this.autor = autor; 14 | this.preco = preco; 15 | } 16 | 17 | public String getTitulo() { 18 | return titulo; 19 | } 20 | 21 | public String getAutor() { 22 | return autor; 23 | } 24 | 25 | public double getPreco() { 26 | return preco; 27 | } 28 | 29 | @Override 30 | public String toString() { 31 | return "Livro{" + 32 | "titulo='" + titulo + '\'' + 33 | ", autor='" + autor + '\'' + 34 | ", preco=" + preco + 35 | '}'; 36 | } 37 | } 38 | 39 | class ComparatorPorPreco implements Comparator> { 40 | @Override 41 | public int compare(Map.Entry l1, Map.Entry l2) { 42 | return Double.compare(l1.getValue().getPreco(), l2.getValue().getPreco()); 43 | } 44 | } 45 | 46 | class ComparatorPorAutor implements Comparator> { 47 | @Override 48 | public int compare(Map.Entry l1, Map.Entry l2) { 49 | return l1.getValue().getAutor().compareToIgnoreCase(l2.getValue().getAutor()); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/map/Pesquisa/ContagemPalavras.java: -------------------------------------------------------------------------------- 1 | package main.java.map.Pesquisa; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class ContagemPalavras { 7 | //atributo 8 | private Map palavras; 9 | 10 | public ContagemPalavras() { 11 | this.palavras = new HashMap<>(); 12 | } 13 | 14 | public void adicionarPalavras(String linguagem, Integer contagem) { 15 | palavras.put(linguagem, contagem); 16 | } 17 | 18 | public void removerPalavra(String palavra) { 19 | if (!palavras.isEmpty()) { 20 | palavras.remove(palavra); 21 | } else { 22 | System.out.println("O Map está vazio."); 23 | } 24 | } 25 | 26 | public int exibirContagemPalavras() { 27 | int contagemTotal = 0; 28 | for (int contagem : palavras.values()) { 29 | contagemTotal += contagem; 30 | } 31 | return contagemTotal; 32 | } 33 | 34 | public String encontrarPalavrasMaisFrequente() { 35 | String linguagemMaisFrequente = null; 36 | int maiorContagem = 0; 37 | for (Map.Entry entry : palavras.entrySet()) { 38 | if (entry.getValue() > maiorContagem) { 39 | maiorContagem = entry.getValue(); 40 | linguagemMaisFrequente = entry.getKey(); 41 | } 42 | } 43 | return linguagemMaisFrequente; 44 | } 45 | 46 | public static void main(String[] args) { 47 | ContagemPalavras contagemLinguagens = new ContagemPalavras(); 48 | 49 | // Adiciona linguagens e suas contagens 50 | contagemLinguagens.adicionarPalavras("Java", 2); 51 | contagemLinguagens.adicionarPalavras("Python", 8); 52 | contagemLinguagens.adicionarPalavras("JavaScript", 1); 53 | contagemLinguagens.adicionarPalavras("C#", 6); 54 | 55 | // Exibe a contagem total de linguagens 56 | System.out.println("Existem " + contagemLinguagens.exibirContagemPalavras() + " palavras."); 57 | 58 | // Encontra e exibe a linguagem mais frequente 59 | String linguagemMaisFrequente = contagemLinguagens.encontrarPalavrasMaisFrequente(); 60 | System.out.println("A linguagem mais frequente é: " + linguagemMaisFrequente); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/map/Pesquisa/EstoqueProdutos.java: -------------------------------------------------------------------------------- 1 | package main.java.map.Pesquisa; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class EstoqueProdutos { 7 | private Map estoqueProdutosMap; 8 | 9 | public EstoqueProdutos() { 10 | this.estoqueProdutosMap = new HashMap<>(); 11 | } 12 | 13 | public void adicionarProduto(long cod, String nome, int quantidade, double preco) { 14 | estoqueProdutosMap.put(cod, new Produto(nome, preco, quantidade)); 15 | } 16 | 17 | public void exibirProdutos() { 18 | System.out.println(estoqueProdutosMap); 19 | } 20 | 21 | public double calcularValorTotalEstoque() { 22 | double valorTotalEstoque = 0d; 23 | if (!estoqueProdutosMap.isEmpty()) { 24 | for (Produto p : estoqueProdutosMap.values()) { 25 | valorTotalEstoque += p.getQuantidade() * p.getPreco(); 26 | } 27 | } 28 | return valorTotalEstoque; 29 | } 30 | 31 | public Produto obterProdutoMaisCaro() { 32 | Produto produtoMaisCaro = null; 33 | double maiorPreco = Double.MIN_VALUE; 34 | for (Produto p : estoqueProdutosMap.values()) { 35 | if (p.getPreco() > maiorPreco) { 36 | produtoMaisCaro = p; 37 | maiorPreco = p.getPreco(); 38 | } 39 | } 40 | return produtoMaisCaro; 41 | } 42 | 43 | public Produto obterProdutoMaisBarato() { 44 | Produto produtoMaisBarato = null; 45 | double menorPreco = Double.MAX_VALUE; 46 | for (Produto p : estoqueProdutosMap.values()) { 47 | if (p.getPreco() < menorPreco) { 48 | produtoMaisBarato = p; 49 | menorPreco = p.getPreco(); 50 | } 51 | } 52 | return produtoMaisBarato; 53 | } 54 | 55 | public Produto obterProdutoMaiorQuantidadeValorTotalNoEstoque() { 56 | Produto produtoMaiorQuantidadeValorNoEstoque = null; 57 | double maiorValorTotalProdutoEstoque = 0d; 58 | if (!estoqueProdutosMap.isEmpty()) { 59 | for (Map.Entry entry : estoqueProdutosMap.entrySet()) { 60 | double valorProdutoEmEstoque = entry.getValue().getPreco() * entry.getValue().getQuantidade(); 61 | if (valorProdutoEmEstoque > maiorValorTotalProdutoEstoque) { 62 | maiorValorTotalProdutoEstoque = valorProdutoEmEstoque; 63 | produtoMaiorQuantidadeValorNoEstoque = entry.getValue(); 64 | } 65 | } 66 | } 67 | return produtoMaiorQuantidadeValorNoEstoque; 68 | } 69 | 70 | public static void main(String[] args) { 71 | EstoqueProdutos estoque = new EstoqueProdutos(); 72 | 73 | // Exibe o estoque vazio 74 | estoque.exibirProdutos(); 75 | 76 | // Adiciona produtos ao estoque 77 | estoque.adicionarProduto(1L, "Notebook", 1, 1500.0); 78 | estoque.adicionarProduto(2L, "Mouse", 5, 25.0); 79 | estoque.adicionarProduto(3L, "Monitor", 10, 400.0); 80 | estoque.adicionarProduto(4L, "Teclado", 2, 40.0); 81 | 82 | // Exibe os produtos no estoque 83 | estoque.exibirProdutos(); 84 | 85 | // Calcula e exibe o valor total do estoque 86 | System.out.println("Valor total do estoque: R$" + estoque.calcularValorTotalEstoque()); 87 | 88 | // Obtém e exibe o produto mais caro 89 | Produto produtoMaisCaro = estoque.obterProdutoMaisCaro(); 90 | System.out.println("Produto mais caro: " + produtoMaisCaro); 91 | 92 | // Obtém e exibe o produto mais barato 93 | Produto produtoMaisBarato = estoque.obterProdutoMaisBarato(); 94 | System.out.println("Produto mais barato: " + produtoMaisBarato); 95 | 96 | // Obtém e exibe o produto com a maior quantidade em valor no estoque 97 | Produto produtoMaiorQuantidadeValorTotal = estoque.obterProdutoMaiorQuantidadeValorTotalNoEstoque(); 98 | System.out.println("Produto com maior quantidade em valor no estoque: " + produtoMaiorQuantidadeValorTotal); 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /src/main/java/map/Pesquisa/Produto.java: -------------------------------------------------------------------------------- 1 | package main.java.map.Pesquisa; 2 | 3 | public class Produto { 4 | //atributos 5 | private String nome; 6 | private double preco; 7 | private int quantidade; 8 | 9 | public Produto(String nome, double preco, int quantidade) { 10 | this.nome = nome; 11 | this.preco = preco; 12 | this.quantidade = quantidade; 13 | } 14 | 15 | public String getNome() { 16 | return nome; 17 | } 18 | 19 | public double getPreco() { 20 | return preco; 21 | } 22 | 23 | public int getQuantidade() { 24 | return quantidade; 25 | } 26 | 27 | @Override 28 | public String toString() { 29 | return "Produto{" + 30 | "nome='" + nome + '\'' + 31 | ", preco=" + preco + 32 | ", quantidade=" + quantidade + 33 | '}'; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/map/README.md: -------------------------------------------------------------------------------- 1 | # MAP 2 | 3 |

4 | Map interface hierarchy Java
5 | Hierarchy of Collection Framework in Java 6 |

7 | 8 | - A interface `Map` é usada para mapear dados na forma de chaves e valores. 9 | - O `Map` do Java é um objeto que mapeia chaves para valores. 10 | - Um `Map` não pode conter chaves duplicadas: cada chave pode mapear no máximo um valor. 11 | - A plataforma Java possui três implementações gerais de `Map`: `HashMap`, `TreeMap` e `LinkedHashMap`. 12 | - As operações básicas do `Map` são: `put` (inserir ou atualizar), `get` (obter), `containsKey` (verificar se contém uma chave), `containsValue` (verificar se contém um valor), `size` (obter o tamanho) e `isEmpty` (verificar se está vazio). 13 | 14 | > ##### *HashTable* é uma implementação antiga da interface Map no Java que é sincronizada e thread-safe, tornando-a adequada para uso em ambientes concorrentes. Ela não permite chaves ou valores nulos e os elementos não são mantidos em uma ordem específica. 15 | 16 | > ##### *LinkedHashMap*, por outro lado, é uma implementação da interface Map que preserva a ordem de inserção dos elementos. Cada elemento possui referências ao próximo e ao anterior, formando uma lista encadeada. Isso permite que os elementos sejam iterados na ordem em que foram inseridos. Além disso, o LinkedHashMap também permite chaves ou valores nulos. 17 | 18 | > ##### *HashMap* é uma implementação da interface Map que não mantém uma ordem específica dos elementos. Ele armazena os elementos internamente usando uma função de hash para melhorar a eficiência das operações de pesquisa e acesso. O HashMap também permite chaves ou valores nulos. 19 | 20 | ### Referências: 21 | 22 | [1] "Collections in Java Tutorial." DigitalOcean Community. Disponível em: https://www.digitalocean.com/community/tutorials/collections-in-java-tutorial. 23 | 24 | [2] "Java™ Platform, Standard Edition 17 API Specification - Class Map." Oracle. Disponível em: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html. 25 | 26 | ## Fixando os Conhecimentos 27 | 28 | Exercícios: 29 | 30 | 1. Operações Básicas com Map 31 | 2. Pesquisa em Map 32 | 3. Ordenação nas Map 33 | 34 | ## Operações Básicas com Map 35 | 36 | ### 1. Agenda de Contatos 37 | 38 |

39 | Crie uma classe chamada "AgendaContatos" que utilize um Map para armazenar os contatos. Cada contato possui um nome como chave e um número de telefone como valor. Implemente os seguintes métodos: 40 | 41 | - `adicionarContato(String nome, Integer telefone)`: Adiciona um contato à agenda, associando o nome do contato ao número de telefone correspondente. 42 | - `removerContato(String nome)`: Remove um contato da agenda, dado o nome do contato. 43 | - `exibirContatos()`: Exibe todos os contatos da agenda, mostrando o nome e o número de telefone de cada contato. 44 | - `pesquisarPorNome(String nome)`: Pesquisa um contato pelo nome e retorna o número de telefone correspondente. 45 |

46 | 47 | ### 2. Dicionário 48 | 49 |

50 | Crie uma classe chamada "Dicionario" que utilize um Map para armazenar palavras e suas respectivas definições. Implemente os seguintes métodos: 51 | 52 | - `adicionarPalavra(String palavra, String definicao)`: Adiciona uma palavra e sua definição ao dicionário, associando a palavra à sua definição correspondente. 53 | - `removerPalavra(String palavra)`: Remove uma palavra do dicionário, dado o termo a ser removido. 54 | - `exibirPalavras()`: Exibe todas as palavras e suas definições do dicionário, mostrando cada palavra seguida de sua respectiva definição. 55 | - `pesquisarPorPalavra(String palavra)`: Pesquisa uma palavra no dicionário e retorna sua definição correspondente. 56 |

57 | 58 | --- 59 | 60 | ## Pesquisa em Map 61 | 62 | ### 1. Estoque de Produtos com Preço 63 | 64 |

65 | Crie uma classe chamada "EstoqueProdutos" que utilize um Map para armazenar os produtos, suas quantidades em estoque e seus respectivos preços. Cada produto possui um código como chave e um objeto Produto como valor, contendo nome, quantidade e preço. Implemente os seguintes métodos: 66 | 67 | - `adicionarProduto(long cod, String nome, int quantidade, double preco)`: Adiciona um produto ao estoque, juntamente com a quantidade disponível e o preço. 68 | - `exibirProdutos()`: Exibe todos os produtos, suas quantidades em estoque e preços. 69 | - `calcularValorTotalEstoque()`: Calcula e retorna o valor total do estoque, considerando a quantidade e o preço de cada produto. 70 | - `obterProdutoMaisCaro()`: Retorna o produto mais caro do estoque, ou seja, aquele com o maior preço. 71 | - `obterProdutoMaisBarato()`: Retorna o produto mais barato do estoque, ou seja, aquele com o menor preço. 72 | - `obterProdutoMaiorQuantidadeValorTotalNoEstoque()`: Retorna o produto que está em maior quantidade no estoque, considerando o valor total de cada produto (quantidade * preço). 73 |

74 | 75 | ### 2. Contagem de Palavras 76 | 77 |

78 | Crie uma classe chamada "ContagemPalavras" que utilize um Map para armazenar as palavras e a quantidade de vezes que cada palavra aparece em um texto. Implemente os seguintes métodos: 79 | 80 | - `adicionarPalavra(String palavra, Integer contagem)`: Adiciona uma palavra à contagem. 81 | - `removerPalavra(String palavra)`: Remove uma palavra da contagem, se estiver presente. 82 | - `exibirContagemPalavras()`: Exibe todas as palavras e suas respectivas contagens. 83 | - `encontrarPalavraMaisFrequente()`: Encontra a palavra mais frequente no texto e retorna a palavra e sua contagem. 84 |

85 | 86 | --- 87 | 88 | ## Ordenação nos Map 89 | 90 | ### 1. Agenda de Eventos 91 | 92 |

93 | Crie uma classe chamada "AgendaEventos" que utilize um `Map` para armazenar as datas e seus respectivos Eventos. Cada evento é representado por um objeto da classe "Evento", que possui atributos como nome do evento e o nome da atração. Implemente os seguintes métodos: 94 | 95 | - `adicionarEvento(LocalDate data, String nome, String atracao)`: Adiciona um evento à agenda. 96 | - `exibirAgenda()`: Exibe a agenda de eventos em ordem crescente de data. 97 | - `obterProximoEvento()`: Retorna o próximo evento que ocorrerá. 98 |

99 | 100 | ### 2. Livraria Online 101 | 102 |

103 | Crie uma classe chamada "LivrariaOnline" que representa uma livraria online. Essa classe utiliza um Map para armazenar os livros disponíveis na livraria, utilizando o link da obra na Amazon Marketplace como chave e um objeto da classe "Livro" como valor. A classe "Livro" possui atributos como título, autor e preço. Através da classe "LivrariaOnline", implemente os seguintes métodos: 104 | 105 | - `adicionarLivro(String link, String titulo, String autor, private double preco)`: Adiciona um livro à livraria, utilizando o ISBN como chave no Map. 106 | - `removerLivro(String titulo)`: Remove um livro da livraria, dado o titulo do livro. 107 | - `exibirLivrosOrdenadosPorPreco()`: Exibe os livros da livraria em ordem crescente de preço. 108 | - `pesquisarLivrosPorAutor(String autor)`: Retorna uma lista de todos os livros escritos por um determinado autor. 109 | - `obterLivroMaisCaro()`: Retorna o livro mais caro disponível na livraria. 110 | - `exibirLivroMaisBarato()`: Retorna o livro mais barato disponível na livraria. 111 |

112 | 113 | --- 114 | 115 | ### Dúvidas e Suporte 116 | 117 | Caso você tenha alguma dúvida, problema ou sugestão, fique à vontade para abrir uma issue no repositório. Espero conseguir te ajudar! (: -------------------------------------------------------------------------------- /src/main/java/set/OperacoesBasicas/ConjuntoConvidados.java: -------------------------------------------------------------------------------- 1 | package main.java.set.OperacoesBasicas; 2 | 3 | import java.util.HashSet; 4 | import java.util.Set; 5 | 6 | public class ConjuntoConvidados { 7 | //atributo 8 | private Set convidadosSet; 9 | 10 | public ConjuntoConvidados() { 11 | this.convidadosSet = new HashSet<>(); 12 | } 13 | 14 | public void adicionarConvidado(String nome, int codigoConvite) { 15 | convidadosSet.add(new Convidado(nome, codigoConvite)); 16 | } 17 | 18 | public void removerConvidadoPorCodigoConvite(int codigoConvite) { 19 | Convidado convidadoParaRemover = null; 20 | if (!convidadosSet.isEmpty()) { 21 | for (Convidado c : convidadosSet) { 22 | if (c.getCodigoConvite() == codigoConvite) { 23 | convidadoParaRemover = c; 24 | break; 25 | } 26 | } 27 | convidadosSet.remove(convidadoParaRemover); 28 | } else { 29 | throw new RuntimeException("O conjunto está vazio!"); 30 | } 31 | } 32 | 33 | public int contarConvidados() { 34 | return convidadosSet.size(); 35 | } 36 | 37 | public void exibirConvidados() { 38 | if (!convidadosSet.isEmpty()) { 39 | System.out.println(convidadosSet); 40 | } else { 41 | System.out.println("O conjunto está vazio!"); 42 | } 43 | } 44 | 45 | public static void main(String[] args) { 46 | // Criando uma instância da classe ConjuntoConvidados 47 | ConjuntoConvidados conjuntoConvidados = new ConjuntoConvidados(); 48 | 49 | // Exibindo o número de convidados no conjunto (deve ser zero) 50 | System.out.println("Existem " + conjuntoConvidados.contarConvidados() + " convidado(s) dentro do Set de Convidados"); 51 | 52 | // Adicionando convidados ao conjunto 53 | conjuntoConvidados.adicionarConvidado("Alice", 1234); 54 | conjuntoConvidados.adicionarConvidado("Bob", 1235); 55 | conjuntoConvidados.adicionarConvidado("Charlie", 1235); 56 | conjuntoConvidados.adicionarConvidado("David", 1236); 57 | 58 | // Exibindo os convidados no conjunto 59 | System.out.println("Convidados no conjunto:"); 60 | conjuntoConvidados.exibirConvidados(); 61 | 62 | // Exibindo o número atualizado de convidados no conjunto 63 | System.out.println("Existem " + conjuntoConvidados.contarConvidados() + " convidado(s) dentro do Set de Convidados"); 64 | 65 | // Removendo um convidado do conjunto por código de convite 66 | conjuntoConvidados.removerConvidadoPorCodigoConvite(1236); 67 | System.out.println("Existem " + conjuntoConvidados.contarConvidados() + " convidado(s) dentro do Set de Convidados após a remoção"); 68 | 69 | // Exibindo os convidados atualizados no conjunto 70 | System.out.println("Convidados no conjunto após a remoção:"); 71 | conjuntoConvidados.exibirConvidados(); 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/main/java/set/OperacoesBasicas/ConjuntoPalavrasUnicas.java: -------------------------------------------------------------------------------- 1 | package main.java.set.OperacoesBasicas; 2 | 3 | import java.util.HashSet; 4 | import java.util.Set; 5 | 6 | public class ConjuntoPalavrasUnicas { 7 | //atributos 8 | private Set palavrasUnicasSet; 9 | 10 | public ConjuntoPalavrasUnicas() { 11 | this.palavrasUnicasSet = new HashSet<>(); 12 | } 13 | 14 | public void adicionarPalavra(String palavra) { 15 | palavrasUnicasSet.add(palavra); 16 | } 17 | 18 | public void removerPalavra(String palavra) { 19 | if (!palavrasUnicasSet.isEmpty()) { 20 | if (palavrasUnicasSet.contains(palavra)) { 21 | palavrasUnicasSet.remove(palavra); 22 | } else { 23 | System.out.println("Palavra não encontrada no conjunto!"); 24 | } 25 | } else { 26 | System.out.println("O conjunto está vazio!"); 27 | } 28 | } 29 | 30 | public boolean verificarPalavra(String palavra) { 31 | return palavrasUnicasSet.contains(palavra); 32 | } 33 | 34 | public void exibirPalavrasUnicas() { 35 | if(!palavrasUnicasSet.isEmpty()) { 36 | System.out.println(palavrasUnicasSet); 37 | } else { 38 | System.out.println("O conjunto está vazio!"); 39 | } 40 | } 41 | 42 | public static void main(String[] args) { 43 | // Criando uma instância da classe ConjuntoPalavrasUnicas 44 | ConjuntoPalavrasUnicas conjuntoLinguagens = new ConjuntoPalavrasUnicas(); 45 | 46 | // Adicionando linguagens únicas ao conjunto 47 | conjuntoLinguagens.adicionarPalavra("Java"); 48 | conjuntoLinguagens.adicionarPalavra("Python"); 49 | conjuntoLinguagens.adicionarPalavra("JavaScript"); 50 | conjuntoLinguagens.adicionarPalavra("Python"); 51 | conjuntoLinguagens.adicionarPalavra("C++"); 52 | conjuntoLinguagens.adicionarPalavra("Ruby"); 53 | 54 | // Exibindo as linguagens únicas no conjunto 55 | conjuntoLinguagens.exibirPalavrasUnicas(); 56 | 57 | // Removendo uma linguagem do conjunto 58 | conjuntoLinguagens.removerPalavra("Python"); 59 | conjuntoLinguagens.exibirPalavrasUnicas(); 60 | 61 | // Removendo uma linguagem inexistente 62 | conjuntoLinguagens.removerPalavra("Swift"); 63 | 64 | // Verificando se uma linguagem está no conjunto 65 | System.out.println("A linguagem 'Java' está no conjunto? " + conjuntoLinguagens.verificarPalavra("Java")); 66 | System.out.println("A linguagem 'Python' está no conjunto? " + conjuntoLinguagens.verificarPalavra("Python")); 67 | 68 | // Exibindo as linguagens únicas atualizadas no conjunto 69 | conjuntoLinguagens.exibirPalavrasUnicas(); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/main/java/set/OperacoesBasicas/Convidado.java: -------------------------------------------------------------------------------- 1 | package main.java.set.OperacoesBasicas; 2 | 3 | import java.util.Objects; 4 | 5 | public class Convidado { 6 | //atributos 7 | private String nome; 8 | private int codigoConvite; 9 | 10 | public Convidado(String nome, int codigoConvite) { 11 | this.nome = nome; 12 | this.codigoConvite = codigoConvite; 13 | } 14 | 15 | public String getNome() { 16 | return nome; 17 | } 18 | 19 | public int getCodigoConvite() { 20 | return codigoConvite; 21 | } 22 | 23 | @Override 24 | public boolean equals(Object o) { 25 | if (this == o) return true; 26 | if (!(o instanceof Convidado convidado)) return false; 27 | return getCodigoConvite() == convidado.getCodigoConvite(); 28 | } 29 | 30 | @Override 31 | public int hashCode() { 32 | return Objects.hash(getCodigoConvite()); 33 | } 34 | 35 | @Override 36 | public String toString() { 37 | return "Convidado{" + 38 | "nome='" + nome + '\'' + 39 | ", codigoConvite=" + codigoConvite + 40 | '}'; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/set/Ordenacao/Aluno.java: -------------------------------------------------------------------------------- 1 | package main.java.set.Ordenacao; 2 | 3 | import java.util.Comparator; 4 | import java.util.Objects; 5 | 6 | public class Aluno implements Comparable{ 7 | //atributos 8 | private String nome; 9 | private Long matricula; 10 | private double media; 11 | 12 | public Aluno(String nome, Long matricula, double media) { 13 | this.nome = nome; 14 | this.matricula = matricula; 15 | this.media = media; 16 | } 17 | 18 | public String getNome() { 19 | return nome; 20 | } 21 | 22 | public Long getMatricula() { 23 | return matricula; 24 | } 25 | 26 | public double getMedia() { 27 | return media; 28 | } 29 | 30 | @Override 31 | public boolean equals(Object o) { 32 | if (this == o) return true; 33 | if (!(o instanceof Aluno aluno)) return false; 34 | return Objects.equals(getMatricula(), aluno.getMatricula()); 35 | } 36 | 37 | @Override 38 | public int hashCode() { 39 | return Objects.hash(getMatricula()); 40 | } 41 | 42 | @Override 43 | public int compareTo(Aluno aluno) { 44 | return nome.compareTo(aluno.getNome()); 45 | } 46 | 47 | @Override 48 | public String toString() { 49 | return "Aluno{" + 50 | "nome='" + nome + '\'' + 51 | ", matricula=" + matricula + 52 | ", media=" + media + 53 | '}'; 54 | } 55 | } 56 | 57 | class ComparatorNota implements Comparator { 58 | @Override 59 | public int compare(Aluno o1, Aluno o2) { 60 | return Double.compare(o1.getMedia(), o2.getMedia()); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/main/java/set/Ordenacao/CadastroProdutos.java: -------------------------------------------------------------------------------- 1 | package main.java.set.Ordenacao; 2 | 3 | import java.util.HashSet; 4 | import java.util.Set; 5 | import java.util.TreeSet; 6 | 7 | public class CadastroProdutos { 8 | //atributo 9 | private Set produtoSet; 10 | 11 | public CadastroProdutos() { 12 | this.produtoSet = new HashSet<>(); 13 | } 14 | 15 | public void adicionarProduto(long cod, String nome, double preco, int quantidade) { 16 | produtoSet.add(new Produto(cod, nome, preco, quantidade)); 17 | } 18 | 19 | public Set exibirProdutosPorNome() { 20 | Set produtosPorNome = new TreeSet<>(produtoSet); 21 | if (!produtoSet.isEmpty()) { 22 | return produtosPorNome; 23 | } else { 24 | throw new RuntimeException("O conjunto está vazio!"); 25 | } 26 | } 27 | 28 | public Set exibirProdutosPorPreco() { 29 | Set produtosPorPreco = new TreeSet<>(new ComparatorPorPreco()); 30 | if (!produtoSet.isEmpty()) { 31 | produtosPorPreco.addAll(produtoSet); 32 | return produtosPorPreco; 33 | } else { 34 | throw new RuntimeException("O conjunto está vazio!"); 35 | } 36 | } 37 | 38 | public static void main(String[] args) { 39 | // Criando uma instância do CadastroProdutos 40 | CadastroProdutos cadastroProdutos = new CadastroProdutos(); 41 | 42 | // Adicionando produtos ao cadastro 43 | cadastroProdutos.adicionarProduto(1L, "Smartphone", 1000d, 10); 44 | cadastroProdutos.adicionarProduto(2L, "Notebook", 1500d, 5); 45 | cadastroProdutos.adicionarProduto(1L, "Mouse", 30d, 20); 46 | cadastroProdutos.adicionarProduto(4L, "Teclado", 50d, 15); 47 | 48 | // Exibindo todos os produtos no cadastro 49 | System.out.println(cadastroProdutos.produtoSet); 50 | 51 | // Exibindo produtos ordenados por nome 52 | System.out.println(cadastroProdutos.exibirProdutosPorNome()); 53 | 54 | // Exibindo produtos ordenados por preço 55 | System.out.println(cadastroProdutos.exibirProdutosPorPreco()); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/set/Ordenacao/GerenciadorAlunos.java: -------------------------------------------------------------------------------- 1 | package main.java.set.Ordenacao; 2 | 3 | import java.util.HashSet; 4 | import java.util.Set; 5 | import java.util.TreeSet; 6 | 7 | public class GerenciadorAlunos { 8 | //atributos 9 | private Set alunosSet; 10 | 11 | public GerenciadorAlunos() { 12 | this.alunosSet = new HashSet<>(); 13 | } 14 | 15 | public void adicionarAluno(String nome, Long matricula, double media) { 16 | alunosSet.add(new Aluno(nome, matricula, media)); 17 | } 18 | 19 | public void removerAlunoPorMatricula(long matricula) { 20 | Aluno alunoParaRemover = null; 21 | if (!alunosSet.isEmpty()) { 22 | for (Aluno a : alunosSet) { 23 | if (a.getMatricula() == matricula) { 24 | alunoParaRemover = a; 25 | break; 26 | } 27 | } 28 | alunosSet.remove(alunoParaRemover); 29 | } else { 30 | throw new RuntimeException("O conjunto está vazio!"); 31 | } 32 | 33 | if (alunoParaRemover == null) { 34 | System.out.println("Matricula não encontrada!"); 35 | } 36 | } 37 | 38 | public void exibirAlunosPorNome() { 39 | Set alunosPorNome = new TreeSet<>(alunosSet); 40 | if (!alunosSet.isEmpty()) { 41 | System.out.println(alunosPorNome); 42 | } else { 43 | System.out.println("O conjunto está vazio!"); 44 | } 45 | } 46 | 47 | public void exibirAlunosPorNota() { 48 | Set alunosPorNota = new TreeSet<>(new ComparatorNota()); 49 | if (!alunosSet.isEmpty()) { 50 | alunosPorNota.addAll(alunosSet); 51 | System.out.println(alunosPorNota); 52 | } else { 53 | System.out.println("O conjunto está vazio!"); 54 | } 55 | } 56 | 57 | public static void main(String[] args) { 58 | // Criando uma instância do GerenciadorAlunos 59 | GerenciadorAlunos gerenciadorAlunos = new GerenciadorAlunos(); 60 | 61 | // Adicionando alunos ao gerenciador 62 | gerenciadorAlunos.adicionarAluno("João", 123456L, 7.5); 63 | gerenciadorAlunos.adicionarAluno("Maria", 123457L, 9.0); 64 | gerenciadorAlunos.adicionarAluno("Carlos", 123458L, 5.0); 65 | gerenciadorAlunos.adicionarAluno("Ana", 123459L, 6.8); 66 | 67 | // Exibindo todos os alunos no gerenciador 68 | System.out.println("Alunos no gerenciador:"); 69 | System.out.println(gerenciadorAlunos.alunosSet); 70 | 71 | // Removendo um aluno com matrícula inválida e outro pelo número de matrícula 72 | gerenciadorAlunos.removerAlunoPorMatricula(000L); 73 | gerenciadorAlunos.removerAlunoPorMatricula(123457L); 74 | System.out.println(gerenciadorAlunos.alunosSet); 75 | 76 | // Exibindo alunos ordenados por nome 77 | gerenciadorAlunos.exibirAlunosPorNome(); 78 | 79 | // Exibindo alunos ordenados por nota 80 | gerenciadorAlunos.exibirAlunosPorNota(); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/main/java/set/Ordenacao/Produto.java: -------------------------------------------------------------------------------- 1 | package main.java.set.Ordenacao; 2 | 3 | import java.util.Comparator; 4 | import java.util.Objects; 5 | 6 | public class Produto implements Comparable { 7 | //atributos 8 | private long codigo; 9 | private String nome; 10 | private double preco; 11 | private int quantidade; 12 | 13 | public Produto(long codigo, String nome, double preco, int quantidade) { 14 | this.codigo = codigo; 15 | this.nome = nome; 16 | this.preco = preco; 17 | this.quantidade = quantidade; 18 | } 19 | 20 | @Override 21 | public int compareTo(Produto p) { 22 | return nome.compareToIgnoreCase(p.getNome()); 23 | } 24 | 25 | public long getCodigo() { 26 | return codigo; 27 | } 28 | 29 | public String getNome() { 30 | return nome; 31 | } 32 | 33 | public double getPreco() { 34 | return preco; 35 | } 36 | 37 | public int getQuantidade() { 38 | return quantidade; 39 | } 40 | 41 | @Override 42 | public boolean equals(Object o) { 43 | if (this == o) return true; 44 | if (!(o instanceof Produto produto)) return false; 45 | return getCodigo() == produto.getCodigo(); 46 | } 47 | 48 | @Override 49 | public int hashCode() { 50 | return Objects.hash(getCodigo()); 51 | } 52 | 53 | @Override 54 | public String toString() { 55 | return "Produto{" + 56 | "codigo=" + codigo + 57 | ", nome='" + nome + '\'' + 58 | ", preco=" + preco + 59 | ", quantidade=" + quantidade + 60 | '}'; 61 | } 62 | } 63 | 64 | class ComparatorPorPreco implements Comparator { 65 | @Override 66 | public int compare(Produto p1, Produto p2) { 67 | return Double.compare(p1.getPreco(), p2.getPreco()); 68 | } 69 | } 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /src/main/java/set/Pesquisa/AgendaContatos.java: -------------------------------------------------------------------------------- 1 | package main.java.set.Pesquisa; 2 | 3 | import java.util.HashSet; 4 | import java.util.Set; 5 | 6 | public class AgendaContatos { 7 | //atributo 8 | private Set contatosSet; 9 | 10 | public AgendaContatos() { 11 | this.contatosSet = new HashSet<>(); 12 | } 13 | 14 | public void adicionarContato(String nome, int numero) { 15 | contatosSet.add(new Contato(nome, numero)); 16 | } 17 | 18 | public void exibirContatos() { 19 | if (!contatosSet.isEmpty()) { 20 | System.out.println(contatosSet); 21 | } else { 22 | System.out.println("O conjunto está vazio!"); 23 | } 24 | } 25 | 26 | public Set pesquisarPorNome(String nome) { 27 | Set contatosPorNome = new HashSet<>(); 28 | if (!contatosSet.isEmpty()) { 29 | for (Contato c : contatosSet) { 30 | if (c.getNome().startsWith(nome)) { 31 | contatosPorNome.add(c); 32 | } 33 | } 34 | return contatosPorNome; 35 | } else { 36 | throw new RuntimeException("O conjunto está vazio!"); 37 | } 38 | } 39 | 40 | public Contato atualizarNumeroContato(String nome, int novoNumero) { 41 | Contato contatoAtualizado = null; 42 | if (!contatosSet.isEmpty()) { 43 | for (Contato c : contatosSet) { 44 | if (c.getNome().equalsIgnoreCase(nome)) { 45 | c.setNumero(novoNumero); 46 | contatoAtualizado = c; 47 | break; 48 | } 49 | } 50 | return contatoAtualizado; 51 | } else { 52 | throw new RuntimeException("O conjunto está vazio!"); 53 | } 54 | } 55 | 56 | public static void main(String[] args) { 57 | // Criando uma instância da classe AgendaContatos 58 | AgendaContatos agendaContatos = new AgendaContatos(); 59 | 60 | // Exibindo os contatos no conjunto (deve estar vazio) 61 | agendaContatos.exibirContatos(); 62 | 63 | // Adicionando contatos à agenda 64 | agendaContatos.adicionarContato("João", 123456789); 65 | agendaContatos.adicionarContato("Maria", 987654321); 66 | agendaContatos.adicionarContato("Maria Fernandes", 55555555); 67 | agendaContatos.adicionarContato("Ana", 88889999); 68 | agendaContatos.adicionarContato("Fernando", 77778888); 69 | agendaContatos.adicionarContato("Carolina", 55555555); 70 | 71 | // Exibindo os contatos na agenda 72 | agendaContatos.exibirContatos(); 73 | 74 | // Pesquisando contatos pelo nome 75 | System.out.println(agendaContatos.pesquisarPorNome("Maria")); 76 | 77 | // Atualizando o número de um contato 78 | Contato contatoAtualizado = agendaContatos.atualizarNumeroContato("Carolina", 44443333); 79 | System.out.println("Contato atualizado: " + contatoAtualizado); 80 | 81 | // Exibindo os contatos atualizados na agenda 82 | System.out.println("Contatos na agenda após atualização:"); 83 | agendaContatos.exibirContatos(); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /src/main/java/set/Pesquisa/Contato.java: -------------------------------------------------------------------------------- 1 | package main.java.set.Pesquisa; 2 | 3 | import java.util.Objects; 4 | 5 | public class Contato { 6 | //atributos 7 | private String nome; 8 | private int numero; 9 | 10 | public Contato(String nome, int numero) { 11 | this.nome = nome; 12 | this.numero = numero; 13 | } 14 | 15 | public String getNome() { 16 | return nome; 17 | } 18 | 19 | public int getNumero() { 20 | return numero; 21 | } 22 | 23 | public void setNumero(int numero) { 24 | this.numero = numero; 25 | } 26 | 27 | @Override 28 | public boolean equals(Object o) { 29 | if (this == o) return true; 30 | if (!(o instanceof Contato contato)) return false; 31 | return Objects.equals(getNome(), contato.getNome()); 32 | } 33 | 34 | @Override 35 | public int hashCode() { 36 | return Objects.hash(getNome()); 37 | } 38 | 39 | @Override 40 | public String toString() { 41 | return "{" + nome + "," + numero + "}"; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/set/Pesquisa/ListaTarefas.java: -------------------------------------------------------------------------------- 1 | package main.java.set.Pesquisa; 2 | 3 | import java.util.HashSet; 4 | import java.util.Set; 5 | 6 | public class ListaTarefas { 7 | //atributos 8 | private Set tarefasSet; 9 | 10 | public ListaTarefas() { 11 | this.tarefasSet = new HashSet<>(); 12 | } 13 | 14 | public void adicionarTarefa(String descricao) { 15 | tarefasSet.add(new Tarefa(descricao)); 16 | } 17 | 18 | public void removerTarefa(String descricao) { 19 | Tarefa tarefaParaRemover = null; 20 | if (!tarefasSet.isEmpty()) { 21 | for (Tarefa t : tarefasSet) { 22 | if (t.getDescricao().equalsIgnoreCase(descricao)) { 23 | tarefaParaRemover = t; 24 | break; 25 | } 26 | } 27 | tarefasSet.remove(tarefaParaRemover); 28 | } else { 29 | System.out.println("O conjunto está vazio"); 30 | } 31 | 32 | if(tarefaParaRemover == null) { 33 | System.out.println("Tarefa não encontrada!"); 34 | } 35 | } 36 | 37 | public void exibirTarefas() { 38 | if(!tarefasSet.isEmpty()) { 39 | System.out.println(tarefasSet); 40 | } else { 41 | System.out.println("Tarefa não encontrada!"); 42 | } 43 | } 44 | 45 | public int contarTarefas() { 46 | return tarefasSet.size(); 47 | } 48 | 49 | public Set obterTarefasConcluidas() { 50 | Set tarefasConcluidas = new HashSet<>(); 51 | for (Tarefa t : tarefasSet) { 52 | if (t.isConcluida()) { 53 | tarefasConcluidas.add(t); 54 | } 55 | } 56 | return tarefasConcluidas; 57 | } 58 | 59 | public Set obterTarefasPendentes() { 60 | Set tarefasNaoConcluidas = new HashSet<>(); 61 | for (Tarefa t : tarefasSet) { 62 | if (!t.isConcluida()) { 63 | tarefasNaoConcluidas.add(t); 64 | } 65 | } 66 | return tarefasNaoConcluidas; 67 | } 68 | 69 | public void marcarTarefaConcluida(String descricao) { 70 | for (Tarefa t : tarefasSet) { 71 | if (t.getDescricao().equalsIgnoreCase(descricao)) { 72 | t.setConcluida(true); 73 | } 74 | } 75 | } 76 | 77 | public void marcarTarefaPendente(String descricao) { 78 | Tarefa tarefaParaMarcarComoPendente = null; 79 | for (Tarefa t : tarefasSet) { 80 | if (t.getDescricao().equalsIgnoreCase(descricao)) { 81 | tarefaParaMarcarComoPendente = t; 82 | break; 83 | } 84 | } 85 | 86 | if (tarefaParaMarcarComoPendente != null) { 87 | if(tarefaParaMarcarComoPendente.isConcluida()) { 88 | tarefaParaMarcarComoPendente.setConcluida(false); 89 | } 90 | } else { 91 | System.out.println("Tarefa não encontrada na lista."); 92 | } 93 | } 94 | 95 | public void limparListaTarefas() { 96 | if(tarefasSet.isEmpty()) { 97 | System.out.println("A lista já está vazia!"); 98 | } else { 99 | tarefasSet.clear(); 100 | } 101 | } 102 | 103 | public static void main(String[] args) { 104 | // Criando uma instância da classe ListaTarefas 105 | ListaTarefas listaTarefas = new ListaTarefas(); 106 | 107 | // Adicionando tarefas à lista 108 | listaTarefas.adicionarTarefa("Estudar Java"); 109 | listaTarefas.adicionarTarefa("Fazer exercícios físicos"); 110 | listaTarefas.adicionarTarefa("Organizar a mesa de trabalho"); 111 | listaTarefas.adicionarTarefa("Ler livro"); 112 | listaTarefas.adicionarTarefa("Preparar apresentação"); 113 | 114 | // Exibindo as tarefas na lista 115 | listaTarefas.exibirTarefas(); 116 | 117 | // Removendo uma tarefa 118 | listaTarefas.removerTarefa("Fazer exercícios físicos"); 119 | listaTarefas.exibirTarefas(); 120 | 121 | // Contando o número de tarefas na lista 122 | System.out.println("Total de tarefas na lista: " + listaTarefas.contarTarefas()); 123 | 124 | // Obtendo tarefas pendentes 125 | System.out.println(listaTarefas.obterTarefasPendentes()); 126 | 127 | // Marcando tarefas como concluídas 128 | listaTarefas.marcarTarefaConcluida("Ler livro"); 129 | listaTarefas.marcarTarefaConcluida("Estudar Java"); 130 | 131 | // Obtendo tarefas concluídas 132 | System.out.println(listaTarefas.obterTarefasConcluidas()); 133 | 134 | // Marcando tarefas como pendentes 135 | listaTarefas.marcarTarefaPendente("Estudar Java"); 136 | listaTarefas.exibirTarefas(); 137 | 138 | // Limpando a lista de tarefas 139 | listaTarefas.limparListaTarefas(); 140 | listaTarefas.exibirTarefas(); 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /src/main/java/set/Pesquisa/Tarefa.java: -------------------------------------------------------------------------------- 1 | package main.java.set.Pesquisa; 2 | 3 | public class Tarefa { 4 | //atributos 5 | private String descricao; 6 | private boolean concluida; 7 | 8 | public Tarefa(String descricao) { 9 | this.descricao = descricao; 10 | this.concluida = false; 11 | } 12 | 13 | public String getDescricao() { 14 | return descricao; 15 | } 16 | 17 | public boolean isConcluida() { 18 | return concluida; 19 | } 20 | 21 | public void setDescricao(String descricao) { 22 | this.descricao = descricao; 23 | } 24 | 25 | public void setConcluida(boolean concluida) { 26 | this.concluida = concluida; 27 | } 28 | 29 | @Override 30 | public String toString() { 31 | return "Tarefa{" + 32 | "descricao='" + descricao + '\'' + 33 | ", concluida=" + concluida + 34 | '}'; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/set/README.md: -------------------------------------------------------------------------------- 1 | # SET 2 | 3 |

4 | Set interface hierarchy Java
5 | Hierarchy of Collection Framework in Java 6 |

7 | 8 | - A interface `Set` é uma coleção que não pode conter elementos duplicados. 9 | - Essa interface representa o conceito matemático de um conjunto e é usada para representar conjuntos, como um baralho de cartas. 10 | - A plataforma Java possui três implementações de `Set` de uso geral: `HashSet`, `TreeSet` e `LinkedHashSet`. 11 | - A interface `Set` não permite acesso aleatório a um elemento na coleção. 12 | - Para percorrer os elementos de um `Set`, você pode usar um iterador ou um loop foreach. 13 | 14 | > ##### *HashSet*: O HashSet é uma implementação da interface Set que armazena os elementos em uma tabela hash. Ele não mantém uma ordem específica dos elementos. A principal vantagem do HashSet é que ele oferece um desempenho de busca muito eficiente, pois usa funções hash para indexar os elementos. No entanto, a ordem em que os elementos são adicionados pode não ser preservada ao percorrer o conjunto. 15 | 16 | > ##### *TreeSet*: O TreeSet é uma implementação da interface Set que armazena os elementos em uma árvore binária balanceada. Isso significa que os elementos são armazenados em uma ordem classificada e são mantidos automaticamente em ordem crescente. A principal vantagem do TreeSet é que os elementos são sempre retornados na ordem classificada, o que facilita a obtenção de elementos em uma determinada ordem. No entanto, a busca e a inserção são um pouco mais lentas em comparação com o HashSet. 17 | 18 | > ##### *LinkedHashSet*: O LinkedHashSet é uma implementação da interface Set que mantém a ordem de inserção dos elementos, além de usar uma tabela hash para obter um bom desempenho de busca. Ele é semelhante ao HashSet, mas também mantém uma lista duplamente vinculada que preserva a ordem de inserção. Isso permite que os elementos sejam percorridos na ordem em que foram adicionados. O LinkedHashSet é útil quando você precisa manter a ordem de inserção dos elementos e também ter um bom desempenho de busca. 19 | 20 | ### Referências: 21 | 22 | [1] "Collections in Java Tutorial." DigitalOcean Community. Disponível em: https://www.digitalocean.com/community/tutorials/collections-in-java-tutorial. 23 | 24 | [2] "Java™ Platform, Standard Edition 17 API Specification - Class Set." Oracle. Disponível em: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Set.html. 25 | 26 | ## Fixando os Conhecimentos 27 | 28 | Exercícios: 29 | 30 | 1. Operações Básicas com Set 31 | 2. Pesquisa em Set 32 | 3. Ordenação nas Set 33 | 34 | ## Operações Básicas com Set 35 | 36 | ### 1. Conjunto de Convidados 37 | 38 |

Crie uma classe chamada "ConjuntoConvidados" que possui um conjunto de objetos do tipo "Convidado" como atributo. Cada convidado possui atributos como nome e código do convite. Implemente os seguintes métodos: 39 | 40 | - `adicionarConvidado(String nome, int codigoConvite)`: Adiciona um convidado ao conjunto. 41 | - `removerConvidadoPorCodigoConvite(int codigoConvite)`: Remove um convidado do conjunto com base no código do convite. 42 | - `contarConvidados()`: Conta o número total de convidados no Set. 43 | - `exibirConvidados()`: Exibe todos os convidados do conjunto. 44 |

45 | 46 | ### 2. Conjunto de Palavras Únicas 47 | 48 |

49 | Crie uma classe chamada "ConjuntoPalavrasUnicas" que possui um conjunto de palavras únicas como atributo. Implemente os seguintes métodos: 50 | 51 | - `adicionarPalavra(String palavra)`: Adiciona uma palavra ao conjunto. 52 | - `removerPalavra(String palavra)`: Remove uma palavra do conjunto. 53 | - `verificarPalavra(String palavra)`: Verifica se uma palavra está presente no conjunto. 54 | - `exibirPalavrasUnicas()`: Exibe todas as palavras únicas do conjunto. 55 |

56 | 57 | ---- 58 | 59 | ## Pesquisa em Set 60 | 61 | ### 1. Agenda de Contatos 62 | 63 |

64 | Crie uma classe chamada "AgendaContatos" que possui um conjunto de objetos do tipo "Contato" como atributo. Cada contato possui atributos como nome e número de telefone. Implemente os seguintes métodos: 65 | 66 | - `adicionarContato(String nome, int numero)`: Adiciona um contato à agenda. 67 | - `exibirContatos()`: Exibe todos os contatos da agenda. 68 | - `pesquisarPorNome(String nome)`: Pesquisa contatos pelo nome e retorna uma conjunto com os contatos encontrados. 69 | - `atualizarNumeroContato(String nome, int novoNumero)`: Atualiza o número de telefone de um contato específico. 70 |

71 | 72 | ### 2. Lista de Tarefas 73 | 74 |

75 | Crie uma classe chamada "ListaTarefas" que possui um conjunto de objetos do tipo "Tarefa" como atributo. Cada tarefa possui um atributo de descrição e um atributo booleano para indicar se a tarefa foi concluída ou não. Implemente os seguintes métodos: 76 | 77 | - `adicionarTarefa(String descricao)`: Adiciona uma nova tarefa ao Set. 78 | - `removerTarefa(String descricao)`: Remove uma tarefa do Set de acordo com a descrição, se estiver presente. 79 | - `exibirTarefas()`: Exibe todas as tarefas da lista de tarefas. 80 | - `contarTarefas()`: Conta o número total de tarefas na lista de tarefas. 81 | - `obterTarefasConcluidas()`: Retorna um Set com as tarefas concluídas. 82 | - `obterTarefasPendentes()`: Retorna um Set com as tarefas pendentes. 83 | - `marcarTarefaConcluida(String descricao)`: Marca uma tarefa como concluída de acordo com a descrição. 84 | - `marcarTarefaPendente(String descricao)`: Marca uma tarefa como pendente de acordo com a descrição. 85 | - `limparListaTarefas()`: Remove todas as tarefas da lista de tarefas. 86 |

87 | 88 | --- 89 | 90 | ## Ordenação em Set 91 | 92 | ### 1. Cadastro de Produtos 93 | 94 |

95 | Crie uma classe chamada "CadastroProdutos" que possui um conjunto de objetos do tipo "Produto" como atributo. Cada produto possui atributos como nome, cod, preço e quantidade. Implemente os seguintes métodos: 96 | 97 | - `adicionarProduto(long cod, String nome, double preco, int quantidade)`: Adiciona um produto ao cadastro. 98 | - `exibirProdutosPorNome()`: Exibe todos os produtos do cadastro em ordem alfabética pelo nome. 99 | - `exibirProdutosPorPreco()`: Exibe todos os produtos do cadastro em ordem crescente de preço. 100 |

101 | 102 | ### 2. Lista de Alunos 103 | 104 |

105 | Crie uma classe chamada "GerenciadorAlunos" que irá lidar com uma lista de alunos. Cada aluno terá atributos como nome, matrícula e nota. Implementaremos os seguintes métodos: 106 | 107 | - `adicionarAluno(String nome, Long matricula, double media)`: Adiciona um aluno ao conjunto. 108 | - `removerAluno(long matricula)`: Remove um aluno ao conjunto a partir da matricula, se estiver presente. 109 | - `exibirAlunosPorNome()`: Exibe todos os alunos do conjunto em ordem alfabética pelo nome. 110 | - `exibirAlunosPorNota()`: Exibe todos os alunos do conjunto em ordem crescente de nota. 111 | - `exibirAlunos()`: Exibe todos os alunos do conjunto. 112 |

113 | 114 | --- 115 | ### Dúvidas e Suporte 116 | 117 | Caso você tenha alguma dúvida, problema ou sugestão, fique à vontade para abrir uma issue no repositório. Espero conseguir te ajudar! (: 118 | --------------------------------------------------------------------------------