Ola a todos.
Eu participei da ultima maratona de programação de Java. Em uma conversa que tive posteriormente com um colega ele me disse que para aqueles exercicios da maratona não é aconselhavel utilizal o Scanner para captura de dados pelo teclado, devido ao fato do mesmo ser muito lento no processamento. Pesquisei sobre o BufferedReader mas não vi muita diferença. Alguem sabe de outro recurso utilizado para isso?
Não é a entrada de dados (usando Scanner, BufferedReader etc.) que vai tornar seu processamento mais lento. Você consegue digitar tão rápido que BufferedReader vai ser mais rápido ou mais lento que Scanner?
Existem milhares de coisas que podem tornar seu programa mais lento. Pela minha experiência, usualmente as seguintes coisas deixam seu programa mais lento:
- Acesso a bancos de dados com tabelas indexadas incorretamente;
- Tentar carregar todos os dados na memória, em vez de usar o suporte a paginação do banco de dados;
- Usar algoritmos incorretos (busca seqüencial em vez de um HashMap; bubblesort em vez de usar Collections.sort ou Arrays.sort ou então um TreeSort);
- Ler arquivos byte por byte, esquecendo-se de encapsular com BufferedAlgumacoisa;
- Usar Remote EJBs quando não é necessário;
- Mandar ou receber mais dados que o necessário;
- Usar o operador de concatenação de strings “+=” desnecessariamente. Usualmente é melhor usar “+” ou então StringBuffer/StringBuilder.
Scanner e BufferedQualquerCoisa não são mutuamente exclusivos; normalmente eu usaria os dois desta forma:
Scanner sc = new Scanner (new BufferedReader (new FileReader ("nomeArquivo.txt")));