Vamos ver como isto funciona.
sábado, 23 de março de 2013
Utilizando Executors
Desde o Java 5 temos uma classe denominada java.util.concurrent.Executors. Esta classe permite gerar e gerenciar de uma forma mais fácil threads, que são o mecanismo básico (juntamente com socket) para nosso programa de chat no servidor.
Vamos ver como isto funciona.
Vamos ver como isto funciona.
sexta-feira, 22 de março de 2013
Ler o conteudo de um diretório utilizando DirectoryStream
Vamos ver mais uma classe de Java NIO - DirectoryStream.
Na verdade DirectoryStream não é uma classe, mas uma interface, isto quer dizer que ela não pode ser instanciada (não dá para usarmos o operador new) e sua função é de definir os métodos que devem ser implementados por outra classe que a estende (implementa).
No nosso caso, estamos utilizando Files.newDirectoryStream é uma factory que retorna um objeto que implementa esta interface. O Java implementa três versões deste método:
Na verdade DirectoryStream não é uma classe, mas uma interface, isto quer dizer que ela não pode ser instanciada (não dá para usarmos o operador new) e sua função é de definir os métodos que devem ser implementados por outra classe que a estende (implementa).
No nosso caso, estamos utilizando Files.newDirectoryStream é uma factory que retorna um objeto que implementa esta interface. O Java implementa três versões deste método:
- newDirectoryStream(Path):
- abre o diretório especificado e permite varrer todas as suas entradas
- o único parâmetro é um Path
- newDirectoryStream(Path, DirectoryStream.Filter<>)
- equivale ao primeiro caso, porém passamos também um filtro, que restringe a somente as entradas que passarem neste filtro.
- newDirectoryStream(Path, String)
- equivale ao segundo caso acima, porém o filtro é passado como uma String que deve possuir um formato do tipo GLOB.
terça-feira, 19 de março de 2013
Recursividade - Parte 2 ou MergeSort
O merge sort é um algoritmo de ordenação que utiliza recursividade em uma estratégia do tipo dividir-para-conquistar que consiste em
Como este algoritmo do Merge Sort usa a recursividade em alguns problemas esta técnica não é muito eficiente devido ao alto consumo de memória e tempo de execução. As principais recomendações para tornar este algoritmo mais eficiente são:
Você vai encontrar diversas informações úteis sobre este algoritmo no site do prof Sedgewick.
- Dividir: o conjunto de dados em vários subconjuntos e ordenar esses subconjuntos através da recursividade, isto é, por divisão sucessiva até que o problema fique simples (veja no vídeo)
- Conquistar: após todos os subconjuntos terem sido ordenados ocorre a união das resoluções em um subconjunto maior até que tenhamos todos o conjunto original ordenado.
- Dividir os dados em subconjuntos pequenos;
- Classificar as duas metades recursivamente aplicando o merge sort;
- Juntar as duas metades em um único conjunto já ordenado.
Como este algoritmo do Merge Sort usa a recursividade em alguns problemas esta técnica não é muito eficiente devido ao alto consumo de memória e tempo de execução. As principais recomendações para tornar este algoritmo mais eficiente são:
- como o merge sort não é muito eficiente para pequenos conjuntos, devemos utilizar um outro método para subconjuntos com 10 ou menos elementos
- verificar se o conjunto de dados já está ordenado
- reduzir o tempo de ordenação eliminando a necessidade de cópia para a estrutura de dados auxiliar.
Você vai encontrar diversas informações úteis sobre este algoritmo no site do prof Sedgewick.
Assinar:
Postagens (Atom)