Você está aqui: Java ::: Dicas & Truques ::: Ordenação e Pesquisa (Busca) |
Como usar a busca binária em Java - Pesquisa binária na linguagem JavaQuantidade de visualizações: 502 vezes |
A busca binária, ou pesquisa binária, é um algoritmo eficiente para encontrar um item em uma lista (vetor ou array) ordenada. Sim, os itens devem, obrigatoriamente, estar ordenados. O processo é bem simples. A busca binária começa a partir do meio da lista e compara o item nesta posição com o valor sendo pesquisado. Se o valor não for encontrado e for menor que o item no meio da lista, o algoritmo passa para a porção à esquerda da lista, eliminando, assim, metade dos elementos do vetor ou array (a porção maior que o valor pesquisado). Se o valor não for encontrado e for maior que o item no meio da lista, então a busca reinicia a partir da metade da sub-lista à direita (os itens maiores que o valor pesquisado). Essa divisão continua até que o valor seja encontrado ou não seja mais possível dividir a lista pela metade. Se um array ou vetor possuir 100 elementos e usarmos a busca binária nele, precisaremos efetuar no máximo 7 tentativas para encontrar o valor desejado. Se a lista possuir 4 bilhões de itens nós teremos que fazer no máximo 32 tentativas. Isso acontece porque a pesquisa binária é executada em tempo logarítmico, ou seja, log2 n, onde n é a quantidade de itens no vetor. Dessa forma, se tivemos 1.000 itens em um array, log2 1000 = 10 tentativas. Lembre-se de que, na programação log e log2 retornam resultados diferentes: log(10) = 2.302585092994046 enquanto log2(10) = 3.321928094887362. Na análise da busca binária nós usamos sempre log2. Vamos agora ver como podemos codificar a busca binária em Java. Veja o código a seguir: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; import java.util.Arrays; import java.util.Scanner; public class Estudos { public static void main(String[] args) { // para ler a entrada do usuário Scanner entrada = new Scanner(System.in); // vamos criar uma um vetor ordenado de inteiros int valores[] = {3, 5, 7, 8, 9, 12, 43, 50, 52, 60}; System.out.println("Os valores do array são: " + Arrays.toString(valores)); // vamos pedir o item a ser pesquisado System.out.print("Informe o número a ser pesquisado: "); int numero = Integer.parseInt(entrada.nextLine()); // agora vamos pesquisar o número no array usando a pesquisa // binária // a variável esquerda aponta para o primeiro elemento do vetor int esquerda = 0; // a variável direita aponta para o último elemento do vetor int direita = valores.length - 1; // para indicar se o valor foi encontrado boolean encontrado = false; // enquanto houver mais de um elemento a ser comparado while (esquerda <= direita){ // obtemos o elemento na metade da lista int meio = (esquerda + direita) / 2; // fazemos a comparação if (numero == valores[meio]){ System.out.println("O número foi encontrado no índice " + meio); encontrado = true; break; // sai do laço } // o item atual é maior que o valor pesquisado? if (valores[meio] > numero){ direita = meio - 1; } // o item atual é menor que o valor pesquisado? else{ esquerda = meio + 1; } } // o valor foi encontrado? if (!encontrado){ System.out.println("O valor pesquisado não foi encontrado"); } } } Ao executar este código Java nós teremos o seguinte resultado: Os valores da lista são: [3, 5, 7, 8, 9, 12, 43, 50, 52, 60] Informe o número a ser pesquisado: 9 O número foi encontrado no índice 4 |
Link para compartilhar na Internet ou com seus amigos: |
Java ::: Pacote java.lang ::: String |
Como obter um objeto String a partir de um StringBuffer ou StringBuilder do JavaQuantidade de visualizações: 3088 vezes |
As classes StringBuffer e StringBuilder possuem as mesmas funcionalidades. A diferença é que StringBuilder não é segura em relação à threads e está sendo rapidamente substituída pela classe StringBuffer. Ambas são parecidos com uma String, com a diferença que um StringBuffer ou StringBuilder pode ser modificado in-place, ou seja, modificações em seu conteúdo não geram uma nova cópia, como acontece com objetos da classe String. Nesta dica eu mostrarei como criar novos objetos String a partir do conteúdo de um StringBuffer ou StringBuilder. Vamos começar analisando os construtores da classe String que permitem passar um objeto StringBuffer ou StringBuilder: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; public class Estudos{ public static void main(String[] args) { // um StringBuffer contendo uma frase (troque // StringBuffer por StringBuilder e o resultado será o mesmo StringBuffer frase = new StringBuffer("Gosto muito de programar em Java"); // vamos obter uma String a partir deste StringBuffer String fraseString = new String(frase); // e exibimos o resultado System.out.println(fraseString); } } Resultado parecido pode ser obtido sem o uso dos construtores String(StringBuilder builder) e String(StringBuffer buffer). Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; public class Estudos{ public static void main(String[] args) { // um StringBuffer contendo uma frase (troque // StringBuffer por StringBuilder e o resultado será o mesmo StringBuffer frase = new StringBuffer("Gosto muito de programar em Java"); // vamos obter uma String a partir deste StringBuffer String fraseString = frase.toString(); // e exibimos o resultado System.out.println(fraseString); } } Agora nós usamos o método toString() da classe StringBuffer para converter seu conteúdo em uma string e atribuí-lo à variável fraseString. |
Java ::: Coleções (Collections) ::: ArrayList |
Java ArrayList para iniciantes - Como excluir todos os elementos de uma ArrayList usando seu método clear()Quantidade de visualizações: 12198 vezes |
Nesta dica eu mostro como podemos usar o método clear() da classe ArrayList, da linguagem Java, para limpar seu conteúdo, ou seja, excluir todos os seus itens de uma só vez. Veja o código completo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- import java.util.ArrayList; public class Estudos{ public static void main(String[] args){ // cria uma ArrayList que conterá inteiros ArrayList<Integer> valores = new ArrayList<Integer>(); // adiciona itens na lista valores.add(34); valores.add(12); valores.add(8); valores.add(23); // obtém a quantidade de itens na lista int quant = valores.size(); System.out.println("A lista contém " + quant + " itens"); // limpa a lista valores.clear(); // obtém a nova quantidade quant = valores.size(); System.out.println("Agora a lista contém " + quant + " itens"); System.exit(0); } } Ao executarmos este código nós teremos o seguinte resultado: A lista contém 4 itens Agora a lista contém 0 itens |
Java ::: Pacote java.util ::: Iterator |
Como usar objetos da interface Iterator do Java em suas aplicaçõesQuantidade de visualizações: 2839 vezes |
Um objeto da interface Iterator<E>, no pacote java.util, é usado para percorrer os elementos de uma coleção. Um Iterator é usado com frequencia em substituição a um Enumeration. Há duas diferenças principais entre os dois: a) Um Iterator permite a remoção de elementos na coleção sendo percorrida no momento. b) Os métodos do Iterator são mais curtos e apresentam melhoria em relação aos métodos do Enumeration. As subinterfaces conhecidas de Iterator<E> são ListIterator<E> e XMLEventReader. As classes conhecidas que implementam esta interface são BeanContextSupport.BCSIterator, EventReaderDelegate e Scanner. Veja um trecho de código no qual usamos um Iterator para percorrer e exibir os valores dos elementos de uma ArrayList: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- package estudos; import java.util.ArrayList; import java.util.Iterator; public class Estudos{ public static void main(String[] args){ // vamos criar uma ArrayList ArrayList<String> pessoas = new ArrayList(); pessoas.add("Osmar"); pessoas.add("Carlos"); pessoas.add("Fernanda"); // vamos obter um Iterator para a lista e percorrer todos os elementos for(Iterator<String> pessoa = pessoas.iterator(); pessoa.hasNext();){ System.out.println(pessoa.next()); } } } Ao executar este exemplo nós teremos o seguinte resultado: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- Osmar Carlos Fernanda |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
Java - Estruturas de dados em Java - Como obter a quantidade de nós em uma árvore binária usando Java |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |