Bem-vindo de volta, Scott Stanley aqui. Nestas lições, vamos dar uma olhada no framework de coleções, algumas funções auxiliares estáticas que podemos usar para trabalhar com essas coleções, e então vamos dar uma olhada no natural e algoritmos de classificação personalizados que podemos especificar. Nesta lição, vou mostrar a você o quadro de coleções. Vemos que é composto de vários tipos interessantes. A primeira coisa para a qual quero chamar sua atenção é, vemos as caixas laranja aqui são os tipos de interface, e as caixas azuis são os tipos de classe. Então, apenas para relembrar, as interfaces especificam o quê, e as classes, as implementações dessas interfaces, eles determinam como, como algo funciona. Então podemos ver no topo da hierarquia da estrutura de coleção, existe uma interface de coleta, que é o mais genérico de todos. E então você vê alguns mais específicos tipo interfaces, listas, sugestões, conjuntos. Existem pilhas, mapas, árvores, quase tudo que você poderia hope for faz parte da hierarquia de estrutura desta coleção. Vamos dar uma olhada aqui no teste de coleções. Certo, aqui vamos nós. O primeiro cenário de teste que vemos é que estamos criando uma nova lista de array. Estamos armazenando-o como o tipo genérico, referindo-se a ele genericamente como o tipo de interface de lista. E neste caso, estamos usando os genéricos. E então esta vai ser uma lista do tipo de número. E vamos adicionar os primeiros 50, bem até 50 números primos. Então, dois, três, cinco, sete, 11 até 47. E então provamos que ele tem um tamanho de 15, que é o número de elementos que adicionamos a ele. Portanto, isso exigiu bastante digitação, como você pode ver. Eles nos deram alguns atalhos auxiliares de fazer isso que torna a vida um pouco mais fácil para nós. A primeira delas é, em vez de criar uma nova lista de matrizes do jeito que eu fiz aqui e empacotá-lo com esses números primos, vamos usar a abordagem de atalho e apenas usar as matrizes como uma lista e especifique os 15 números. E, mais recentemente, eles adicionaram alguns novos comportamentos para esses tipos de interface, seus métodos padrão nas interfaces. Portanto, temos uma lista de, e da mesma forma, podemos especificar os primeiros 50 primos. Agora uma lista é uma lista ordenada, que nos permite adicionar um elemento em um determinado índice. Então, se você ver aqui, temos um, dois, quatro, cinco e seis, e esses elementos são numerados zero, um, dois, três, quatro, se quiséssemos inserir o número três entre dois e quatro, diríamos que iríamos gostaria de adicionar no índice dois o número três. E o que ele faz é deslizar tudo para a direita que estava naquele local e além daquele ponto. Depois de adicionarmos o número três na segunda posição, zero, um, dois, então a lista será um, dois, três, quatro, cinco, seis. Vamos dar uma olhada em um pequeno caminho rápido de espremer duplicatas de uma lista. Portanto, uma lista permite duplicatas. Na verdade, você pode ver que temos o número dois duplicado várias vezes, bem como seis e sete. E o tamanho desta lista é 10. Se quisermos espremer as duplicatas, podemos criar um novo conjunto de hash. Os conjuntos não permitem duplicatas. O que isso acaba fazendo é reduzir a lista para um, dois, seis, sete, oito. Aqui está um exemplo de um mapa. Temos um mapa de número para string, e o número aqui, talvez o número de um funcionário. Então o funcionário número um é Scott. A número dois é Jennifer. O número três é Tyler. E então podemos verificar que olhando para o mapa, esta coleção, para a chave número três, é Tyler. Diante do novo comportamento posto se ausente, se quiséssemos colocar um novo par de valores-chave em um mapa, mas queríamos ter certeza de que não esbarrávamos em nada que já pode ter estado naquele local, tivemos que fazer isso. Se eu procurar a chave número três neste mapa, e não existe tal coisa, então eu vou coloque o número três pareando com a string Peter. E isso foi meio klugey. A nova maneira de fazer isso agora é que podemos apenas dizer colocar se ausente. Coloque se ausente. E a última coisa que veremos aqui é a noção de um mapa hash fraco. Um mapa de hash fraco é muito útil para armazenar caches, por exemplo. A maneira como um tipo de coleção de mapa de hash fraco funciona é esta. Assim que não houver mais referências a elementos dentro do mapa, então os pares chave-valor no mapa hash fraco desaparecerá. Eles vão se limpar automaticamente em um intervalo de coleta de lixo. Então, se criarmos Chris e Eddie aqui, e colocá-los nesta coleção, neste mapa, que é uma implementação de mapa de hash fraca, colocamos esses dois objetos no mapa, e então podemos afirmar o tamanho do mapa como dois. Assim que Chris for definido como nulo, Chris foi um dos principais pares de valor que colocamos neste mapa de hash fraco, assim que Chris for definido como nulo então não há mais referências a esse par de valores-chave e, assim que à medida que ocorre uma coleta de lixo, Eu forcei aqui apenas para que eu pudesse provar o problema, assim que executamos uma coleta de lixo, e então perguntamos ao hash map qual é o seu tamanho, seu tamanho não é mais dois, seu tamanho agora é um, porque descartar a referência a um par de valor-chave reduz automaticamente o tamanho desse mapa de hash fraco. Na próxima lição, veremos em algumas funções estáticas, métodos auxiliares, que podemos aproveitar para tirar mais vantagem dessa hierarquia de coleções. Obrigado por assistir e fique ligado.