---
# System prepended metadata

title: Conceitos importantes em Java

---

# 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