Problemas com ordenação

8 respostas
R

Olá pessoal!

Estou com um problema de ordenação no qual eu tenho um conjunto objeto que contem uma data e devo ordená-los por ela… porém eu só encontrei a classe java.util.Arrays, porém o exemplo dela não me foi muito claro. Alguém por algum acaso teria algum exemplo para me mostrar?

[]'s

8 Respostas

B

Ola,

Bom, a classe Arrays é bem simples, o metodo “sort” recebe um array de objects e um comparator, só implementar este, por exmplo:

Comparator<Date> firstDate = new Comparator<Date>(){ public int compare(Date d1, Date d2){ if(d1.equals(d2)) return 0; if(d1.before(d2)) return -1; return 1; } };

E passe o seu array de dates, e o comparetor para o Arrays.sort, ele ordena pra vc o seu array…

R

Bruno,

obrigado por me exclarecer a minha dúvida, porém estou com outro problema agora… eu já tenho isso td armazenado em um objeto java.util.Vector. Não existe outra maneira para organizar isso?

Caso eu faça desse jeito eu posso perder em performanace caso eu tenha um número mto grande de itens em meu vetor…

[]'s

B

Ola,

Bom, pra vc transforma o seu Vector em array é simples… na interface List, que o vector implementa tem o método “toArray(Object[])”, e pra voltar é

myVector = new Vector(Arrays.asList(oArrayDepoisDoSort));

Mas em relação a performace… vai preder sim… com certeza.

C

Olá riqueneil,

Você pode usar o método sort da classe Collections para ordenar o seu Vector, se não quiser transformá-lo em um array:

Collections.sort(seuVector, seuComparador);

E outro detalhe: a implementação do método compare, do comparador, deve comparar os SEUS objetos, e não datas. Você vai ordenar dois objetos seus baseados na data deles, e não duas datas.

Comparator<SuaClasse> comp = new Comparator<SuaClasse>() {
  public int compare(SuaClasse o1, SuaClasse o2) {
    Date d1 = o1.getData();
    Date d2 = o2.getData();
    return d1.compareTo(d2);
  }

  public boolean equals(Object o) {
    return super.equals(o);
  }
};

Eu supus que sua classe tem um método getData(), pra obter a data que você quer comparar. Ajuste para o seu código, se necessário.

Até mais,

R

Cristian,

a sua idéia foi muito boa, porém reparei que o link que vc me enviou é da versão 5 do java e eu estou preso a versão 1.4 :???:

Bruno,

era realmente oq eu imaginava, que fosse perder em performance, porém eu não vejo outra saída, a não ser que ao invés de coloca-lo em vetores eu passe para um array diretamente e depois de ordenado eu coloque no vetor.

Vou ver oq eu faço por aqui… Obrigado pela ajuda de vcs…

[]'s

C

Olá

Se o problema é o link, aqui está o link do método sort do J2SE 1.4.2 :wink:! O método também existe, a única diferença é que você não pode usar generics (esses < e > no código). É só tirar os <> (e os valores dentro deles, claro) que o código funciona no 1.4.2.

Até mais,

B

Ola,

Só uma, que pode te ajudar na performace, a sua coleção tem que ser o Vector, não pode ser o ArrayList, pq o Vector é sincronizado, muito usado para resolver problemas de concorrencia, e isto perde em performace…

“riqueneil”:
Cristian,

a sua idéia foi muito boa, porém reparei que o link que vc me enviou é da versão 5 do java e eu estou preso a versão 1.4 :???:

Bruno,

era realmente oq eu imaginava, que fosse perder em performance, porém eu não vejo outra saída, a não ser que ao invés de coloca-lo em vetores eu passe para um array diretamente e depois de ordenado eu coloque no vetor.

Vou ver oq eu faço por aqui… Obrigado pela ajuda de vcs…

[]'s

R

Olá pessoal!

estou vendo que vou ter que fazer dessa forma mesmo… estou pensando muito em performance…

bem, vamos ver que bicho dá… qq coisa eu volto aqui… heheheh

Muito obrigado pela ajuda…

[]'s

Criado 29 de junho de 2006
Ultima resposta 29 de jun. de 2006
Respostas 8
Participantes 3