diff --git "a/4 - Intermedi\303\241rio/08-Listas-imutaveis.md" "b/4 - Intermedi\303\241rio/08-Listas-imutaveis.md"
index 78748c6..94d2d9a 100644
--- "a/4 - Intermedi\303\241rio/08-Listas-imutaveis.md"
+++ "b/4 - Intermedi\303\241rio/08-Listas-imutaveis.md"
@@ -142,4 +142,6 @@ public class App {
}
}
-```
\ No newline at end of file
+```
+
+[Próximo](./09-Sets.md) - Sets
\ No newline at end of file
diff --git "a/4 - Intermedi\303\241rio/09-Sets.md" "b/4 - Intermedi\303\241rio/09-Sets.md"
new file mode 100644
index 0000000..dda2aec
--- /dev/null
+++ "b/4 - Intermedi\303\241rio/09-Sets.md"
@@ -0,0 +1,90 @@
+#
Sets
+
+Anteriormente vimos uma das Collections que implementam a interface [List](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/List.html), porém List, não é a única coleção existente no Java, neste tópico iremos falar da Collection [Set](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Set.html), esta coleção tem uma peculiaridade em relação a listas comuns, ela não armazena valores repetidos, porém assim como List, o Set também é uma interface genérica.
+
+Temos algumas implementações implementações para esta `interface`, porém iremos falar das seguintes implementações:
+
+- [HashSet](https://docs.oracle.com/javase/8/docs/api/java/util/HashSet.html)
+ - Esta implementação é a mais rápida dentre elas, ela armazena os valores em uma [Hash Table](https://en.wikipedia.org/wiki/Hash_table#:~:text=In%20computing%2C%20a%20hash%20table,desired%20value%20can%20be%20found.), esta implementação não garante a ordem dos elementos adicionados nela.
+- [LinkedHashSet](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashSet.html)
+ - Esta implementação é parecida com a do `HashSet` porém por trás dos panos ela utiliza uma [LinkedList](./07-LinkedList-vs-ArrayList.md) em sua implementação ao invés de um [HashMap](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashMap.html) que sera explicado nos próximos capítulos.
+- [TreeSet](https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html)
+ - Esta implementação utiliza uma [Red Black Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree), esta implementação garante a ordem dos elementos que forem inseridos no Set.
+
+Cada implementação tem sua peculiaridade, mais uso de memoria porém mais rápida inserção, menos uso de memoria e mais rápida na busca, todas as implementações tem pontos fracos e fortes dependendo do tipo de algoritmo e estrutura de dados utilizada.
+
+## Trabalhando com o Set
+
+Iremos realizar as demonstrações utilizando o `HashSet`, porém o modo de trabalho das outras duas implementações mencionadas neste capitulo.
+
+### HashSet e LinkedHashSet
+
+O calculo do [Hash](https://en.wikipedia.org/wiki/Hash_function) determina a posição do elemento na HashTable, por isso não temos a ordenação garantida. Para que um HashSet do tipo escolhido funcione de maneira adequada, precisamos implementar o método `hashCode` para o Objeto, muitas classes do Java já tem essa implementação por padrão `Integer`, `Long`, `String`, `Character`... Porém também podemos fazer isso para a nossa própria classe, claro não iremos fazer isso na mão aqui, iremos utilizar alguma IDE para facilitar a nossa vida, mas não agora, iremos seguir utilizando as classes que o JDK nos fornece.
+
+Instanciando um HashSet:
+
+```java
+public class App {
+ public static void main(String[] args) {
+ Set intSet = new HashSet<>();
+ }
+}
+```
+
+A instanciação do HashSet é simples, basicamente temos o padrão `Set nome = new HashSet<>();` com isso já temos a instancia para trabalharmos.
+
+Para adicionarmos itens no nosso Set utilizamos o método `add`, este método irá nos retornar `true` caso consiga inserir o item, e `false` quando não conseguir, pois o item já existe no Set.
+
+```java
+public class App {
+ public static void main(String[] args) {
+ Set intSet = new HashSet<>();
+ intSet.add(10);
+ intSet.add(20);
+ if(intSet.add(10)) {
+ System.out.println("O numero '10' já existe");
+ }
+ }
+}
+```
+Para removermos um item é muito parecido, utilizamos o método `remove` para realizar esta ação, caso consiga remover o item irá nos retornar `true`, e `false` quando não conseguir, que acontece caso o item não exista no Set.
+
+```java
+public class App {
+ public static void main(String[] args) {
+ Set intSet = new HashSet<>();
+ intSet.add(10)
+ intSet.add(20);
+ if(intSet.remove(10)) {
+ System.out.println("O numero existe no Set e foi removido");
+ }
+ }
+}
+```
+
+Podemos limpar um Set inteiro com o método `clear`, ou ter o seu tamanho com o `size`, saber se esta vázio com o `isEmpty`, métodos muito parecidos com o das listas já estudadas.
+
+```java
+public class App {
+ public static void main(String[] args) {
+ Set intSet = new HashSet<>();
+ intSet.add(10)
+ intSet.add(20);
+ if (intSet.isEmpty()) {
+ System.out.println("Esta vazio!");
+ } else {
+ System.out.println("Não esta vazio!");
+ }
+ intSet.clear();
+ System.out.println("O tamanho do Set é: " + intSet.size());
+ }
+}
+```
+
+### TreeSet
+
+O modo de trabalho com o TreeSet é praticamente o mesmo dos já mostrados aqui, com a grande diferença desta implementação utilizar o método [compareTo](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Comparable.html) ou [compare](https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html) ou invés do `hashCode` para realizar as inserções, remoções e contais, não iremos discutir a implementação destes métodos, pois não é o foco deste cápitulo, a utilização destes métodos é para garantir a integridade da arvore por trás de sua implementação.
+
+### Imutabilidade
+
+Assim como já discutido no [capítulo anterior](./08-Listas-imutaveis.md) os Set's também tem suas versões imutáveis, sendo elas utilizando o `Collections.unmodifiableSet` ou `Set.of`, este método em especifico acima da versão 8, o comportamento é parecido com o das listas imutáveis, porém com as peculiaridades do Set.
\ No newline at end of file
diff --git a/README.md b/README.md
index 9b6c0e5..a84d9c2 100644
--- a/README.md
+++ b/README.md
@@ -56,6 +56,7 @@
6. 🔠 [Collections e Stream API](/4%20-%20Intermedi%C3%A1rio/06-Collections-e-Stream.md)
7. 🔠 [LinkedList vs ArrayList](/4%20-%20Intermedi%C3%A1rio/07-LinkedList-vs-ArrayList.md)
8. 🔠 [Listas Imutáveis](/4%20-%20Intermedi%C3%A1rio/08-Listas-imutaveis.md)
+9. 🔠 [Sets](/4%20-%20Intermedi%C3%A1rio/09-Sets.md)
### Extras