1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Sort de um array de objectos JAVA

Discussão em 'Programação' iniciada por Grib, 12 de Janeiro de 2009. (Respostas: 14; Visualizações: 2341)

  1. Grib

    Grib Power Member

    Boas, existe alguma maneira de ordenar um array de objectos alfabeticamente ?
     
    Última edição: 12 de Janeiro de 2009
  2. blueomega

    blueomega Power Member

    queres ordenar por bid e depois por nome?

    em todo caso o que tens que implementar é a interface Comparable ou seja o metodo object1.compareTo(object2)
     
  3. guilherme

    guilherme Power Member

    mas diz-me uma coisa? queres ordenar por que atributo?
    Isso é um arraylist ou referes te a um array?
    Se for um arraylist usas o compareTo e usas a interface comparable no objecto.
    E depois basta fazer um sort.

    Se te explicares um pouco melhor.
     
  4. Grib

    Grib Power Member

    Não, quero apenas ordenar o array de bids por nome esquece o que disse do outro objecto.

    Quero sortear o vector alfabeticamente pela variavel nome.

    É um vector do genero bid[] allBids = new bid[100}; em que bid é um objecto.
     
    Última edição: 12 de Janeiro de 2009
  5. guilherme

    guilherme Power Member

  6. Grib

    Grib Power Member

    edit: esse exemplo é com arrayList eu estou a usar arrays.
     
    Última edição: 12 de Janeiro de 2009
  7. blueomega

    blueomega Power Member

    isso não importa, o compareTo é sempre feito da mesma maneira seja pra lists, arrays, hashmaps, etc
     
  8. Grib

    Grib Power Member

    ta-me a dar este erro:

    Exception in thread "main" java.lang.NullPointerException
    at Bid.compareTo(Bid.java:32)
    at java.util.Arrays.mergeSort(Unknown Source)
    at java.util.Arrays.mergeSort(Unknown Source)
    at java.util.Arrays.mergeSort(Unknown Source)
    at java.util.Arrays.mergeSort(Unknown Source)
    at java.util.Arrays.mergeSort(Unknown Source)
    at java.util.Arrays.sort(Unknown Source)

    tenho isto :

    public int compareTo(Object o1) {
    return (this.client_name.compareToIgnoreCase(((Bid)o1).client_name));

    }

    public void sort() {
    Arrays.sort(bids);

    }
     
  9. mpssantos

    mpssantos Power Member

    NullPointerException indica que estás a tentar usar uma referência que aponta para null. O mais certo é teres um desses objectos Bid com o client_name a null. verifica-os um por um. faz debug.

    --ms
     
  10. Grib

    Grib Power Member

    Acabei de fazer debug e à primeira vez que entra no comparaTo ele compara os 2 objectos que estao no vector.

    O problema é que depois ele sai e volta a entrar com um objecto null o que é normal visto que o vector so tem 2 objectos o resto esta null .

    como é que evito isto ?
     
  11. blueomega

    blueomega Power Member

    inicializa o vector com algo ou usa algo como lista ligada
     
  12. mpssantos

    mpssantos Power Member

    Isso deve-se dar porque deves ter inicializado o vector com uma dimensão fixa e não preenches-te todos. Os Vectores são containers sincronizados, por isso são mais lentos. Utiliza antes uma collection. ( Collection<Bid> bids = new ArrayList<Bid> () )
    adicionas os teus elementos com o método add, e assim n ficas com nenhuma posição vazia.

    --ms
     
  13. guilherme

    guilherme Power Member

    teoricamente tb pensei o mesmo, seria melhor o uso de um arraylist ou treeset, mas por algum motivo ele pode querer usar um array, mas como já aqui disseram o compareTo serve para tudo (Se não estou em erro:P).
     
  14. mpssantos

    mpssantos Power Member

    A collection serve tao bem quanto o set. O Set como o nome indica é um Conjunto logo não permitirá ter objecto cujo compareTo retorne igual. Por outro lado a Class TreeSet tem um construtor que recebe um comparator, que é o ideal para ti, pois, à medida que inseres os elementos ele ordena-te logo. Se quiseres o arraylist e ordenares no fim, é a mesma coisa.
     
  15. guilherme

    guilherme Power Member

    Ta tudo dito, realmente falei no Treeset por ter um funcionamento semelhante ao ArrayList, basta implementar o comparable e redefinires o compareTo. No teu caso especifico provavelmente o Treeset será a melhor opção.
     

Partilhar esta Página