# Conceitos importantes em Java ## Date ### - *Simple Date Format* * Define formatos para conversão entre Date e String. * dd/MM/yyyy -> 04/08/2022 * dd/MM/yyyy HH:mm:ss -> 04/08/2022 22:13:25 ### - *Calendar* * Classe abstrata (não pode ser instanciada) utilizada para manipulação de datas. Devido ao fato de não ser instanciável, devemos utilizar o método estático *getInstance()*. ![](https://i.imgur.com/VV18Szp.png) ![](https://i.imgur.com/TbyeL7A.png) --- ## Exception ### - Estrutura *try-catch-finally* * Bloco try: parte do código onde pode ocasionar uma *exception*. * Bloco catch: contém a parte que será executada caso capture a *exception*. * Bloco finally: esse bloco é executado independente de ter ocorrido um exceção ou não. ![](https://i.imgur.com/5FeoKyc.png) --- ## Files ### - Leitura de arquivos * Utilizando BufferedReader e FileReader com um bloco try-with-resources: ![](https://i.imgur.com/gdY183V.png) --- ## Generics * Generics permitem que classes, interfaces e métodos possam ser parametrizados por tipo. * Uso comum: coleções. ## Set * **Não admite repetições.** * **Elementos não possuem índices.****Elementos não possuem índices.** * Acesso, remoção e inserção de elementos são rápidos. * Oferece operações de conjunto: intersecção, união, diferença. * Principais implementações: - **HashSet**: mais rápido e não ordenado. - **TreeSet**: mais lento e ordenado pelo compareTo do objeto ou por Comparator. - **LinkedHashSet**: velocidade intermediária e elementos na ordem em que são adicionados. * Alguns métodos importantes: - add(), remove(), contains() => baseados em equals e hashCode (se não existirem é feita a comparação de ponteiros). - size(). - removeIf(Predicate). - addAll(outro Set) => união. - retainAll (outro Set) => intersecção. - removeAll (outro Set) => diferença. --- ## Map * Map é uma coleção **baseada em par chave/valor**. * **Não admite repetição de chave**. * Os elementos são indexados pela chave, mas não possuem posição. * Acesso, inserção e remoção de elementos são rápidos. * **Uso comum: Cookies**. * Principais implementações: - **HashMap**: mais rápido e não ordenado. - **TreeMap**: mais lento e ordenado pelo compareTo do objeto ou por Comparator. - **LinkedHashMap**: velocidade intermediária e elementos na ordem que foram inseridos. * Alguns métodos importantes: - put(key, value), remove(key), containsKey(key), get(key) => baseados em hashCode e equals. Se não existirem, é feito a comparação de ponteiros. - clear(), size(). - keySet() => retorna um Set apenas com as chaves. ![](https://i.imgur.com/YSXyGcG.png) ![](https://i.imgur.com/6Z8OmpV.png) - values() => retorna uma coleção com os valores do Map. ![](https://i.imgur.com/t9XK46z.png) ![](https://i.imgur.com/ALwUJpK.png) ## Programação funcional e Expressões Lambda