Esto fazendo uma aplicação super descolada tals onde leio algums arquivos e gravo no banco de dados. Para mim não ficar lendo do arquivo e gravando no BD com muita grequencia, criei um bufferzinho, sé que estou tendo problemas quando o buffer não é totalmente cheio e para arrumar isso criei um metodo “trimArray”.
Entao, primeiramente a classe java.util.Arrays nao possui um metodo trimArrays(), desse modo voce tera um erro em tempo de compilacao nessa linha. Outro erro esta no cast lineBuffer = (String[][]) Arrays.trimArray(lineBuffer); pois aqui voce tem um array bidimensional.
Suponha agora que voce tenha ia lista de Strings List lista; é frequente o erro de cast quando fazemos String [] array = (String [])lista.toArray(); pois lista.toArray() retorna o tipo Object[]. O que voce deve fazer é: String [] array = lista.toArray(String [] s); assim voce nao tera problemas com o cast!
Bom, foi o que compreendi do seu problema!
Abrcao
Mikhas
Essa classe arrays é minha, eu que criei com varios outros metodos para simplificar algumas rotinas frequentes.
Vini Fernandes:
Suponha agora que voce tenha ia lista de Strings List lista; é frequente o erro de cast quando fazemos String [] array = (String [])lista.toArray(); pois lista.toArray() retorna o tipo Object[]. O que voce deve fazer é: String [] array = lista.toArray(String [] s); assim voce nao tera problemas com o cast!
Bom, foi o que compreendi do seu problema!
Abrcao
Eu não queria usar uma List pois a quantidade de dados que vou trabalhar, eu considero meio grande e queria usar arrays que são estruturas mais simples para não ficar tão pesado.
M
marcobiscaro2112
Como você próprio disse, seu problema é com o Cast:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [[Ljava.lang.String;
Você não pode realizar um cast de um array de Object com uma dimensão (Object[]) para um array de String com duas dimensões (Strinng[][]). Reveja o que quer fazer com esse array bidimensional.
E quanto a não usar List, creio que seja bobagem quando a performance. Até porque se você evitar alguma implementação de List porque acha que ficará pesado - talvez em relação a memória - pode ter, por exemplo, problemas com processamento ao chamar várias vezes esse seu método trim (sem contar o trabalho que terá implementando novos métodos e classes).
T
thingol
Mikhas:
Eu não queria usar uma List pois a quantidade de dados que vou trabalhar, eu considero meio grande e queria usar arrays que são estruturas mais simples para não ficar tão pesado.
Um ArrayList é implementado internamente usando-se um array.
A JVM transforma a chamada aos métodos get e set em um acesso direto a um array, se esse método for chamado suficientes vezes para que o método seja compilado para código nativo. Portanto não há grande vantagem em usar arrays em vez de ArrayList.
Normalmente não compensa ficar tendo o trabalho que você teve (ficar redimensionando arrays no braço) porque isso acaba gastando mais tempo, em vez de economizar alguma coisa.
Uma coisa que aprendi quanto a desempenho é que em 99,9% das vezes é melhor usar estruturas de dados mais adequadas, em vez de usar só arrays e ficar fazendo um monte de gambiarras. Por exemplo, no seu caso nem sei se o melhor é usar um ArrayList. Às vezes é melhor pensar um pouco antes, e ver se o que você precisa não é melhor atendido por um Map ou um Set.
B
Bruno_Laturner
Não ficar tão pesado? Já comparou a diferença? É irrisória.
De qualquer forma você pode encapsular uma List dentro de outra classe, instanciá-la para ficar com um tamanho mínimo desejável, e ir colocando as coisas dentro desse buffer. Quando ele ficar cheio, comite os dados, limpe o buffer e comece de novo.
Achei estranho você falar “gravar no BD com frequencia”, por acaso o modo de transação está em autocommit?
T
thingol
Eu me lembro que, quando se faz um benchmark adequado, a diferença é próxima a zero. Portanto normalmente é melhor usar um ArrayList em vez de um array normal.
Vini_Fernandes
Ratificando o comentario do thingol , creio que adotar uma alguma implementacao de Collection ou Map nao compromenta a sua performance, pois a maioria dos frameworks de persistencia (veja o Hibernate como exemplo) utiliza uma List para retornar a maior parte de suas consultas! Por esse fato imagino que esse seja um bom caminho, mesmo desconhecendo como sao implementados os algoritmos de busca de List, Set, Map, etc.