-
Tenho uma classe model chamada abastecimento onde uma das variáveis é a data;
-
Tenho a classe controladora controle_abastecimento e dentro dela tenho um map: map_abastecimento = new HashMap<Integer, Abastecimento>();
-
preciso ordenar esse ma_abastecimento pela data do abastecimento, como fazer?
Maps não tem o propósito de serem ordenados, eles servem para vincular uma chave com um valor.
O Integer da chave representa o que no seu abastecimento?
representa o id do meu abastecimento. Preciso preencher uma jtable com todos meus abastecimentos ordenados por data
Ué mas sua classe de abastecimento não possui um atributo ID?
Porquê está usando um Map, não faz sentido.
Ué se eu tenho vários objetos (varias instancias) do tipo abastecimento eu preciso armazená-las em algum lugar para ter o acesso a elas?! Poderia botar em um ArrayList, poderia! Porém pelo que sei o correto é coloca-las em um hashmap pois em consultas o hashmap é mt mais rápido para retor que um arraylist!
Estou errado?
Pelo o problema apresentado, como o @staroski disse, não faz sentido. Se vc vai apresentar os dados numa tabela e vai ter acesso à chave primária do registro, a próxima consulta no SGBD para qq operação do CRUD daquela entidade será direta. Agora, se no seu programa vc precisa ficar processando esses resultados de alguma forma antes de apresentar na view, o que eu acho que não é o caso, vc vai precisar de mais performance, ainda mais se a massa de dados processada for grande.
Posto que o que vc perguntou provavelmente não é o que vc precisa e a solução já foi dada, agora vou responder sua pergunta caso queira saber no futuro para resolver um problema onde isso faça realmente sentido.
Uma tabela de dispersão (HashMap
) não garante ordem de inserção, pois o armazenamento das chaves é baseado na função de dispersão (hash). Se vc quiser usar um HashMap
e manter a ordem de inserção, principalmente para iterar sobre a tabela, existe a implementação LinkedHashMap
que, mesmo usando a função de dispersão para armazenamento e performance, mantém também uma estrutura encadeada de modo a armazenar a ordem de inserção. Outra opção é usar a implementação TreeMap
que manterá a ordem natural dos elementos inseridos, sendo que a classe dos objetos armazenados nela ou terá que implementar a interface Comparable
ou você precisará fornecer um Comparator
para estabelecer a relação de ordem total entre os elementos do mesmo tipo.
Uma clarificação extra nesse ponto: um TreeMap vai manter ordenado os itens pela chave do map e não pelo valor armazenado. No seu caso, pelo id do abastecimento (imagino que seja um Integer) ao invés do abastecimento em si.
Em resumo, também não daria o efeito que você procura.
Exatamente.
De qualquer forma, qualquer maracutaia que ele vá fazer para ordenar os elementos do Map pelo valor, com certeza será bem mais lento do que usar uma lista ordenada, o que põe abaixo a preocupação dele de que o acesso às chaves de um Map é mais rápido do que o acesso aos índices de uma lista.
🤷🏻
Com certeza vcs tem muito mais experiencia que eu ahahaha. Eu estava na vida acadêmica, terminando o mestrado… …focado em analise de dados com python… …e agora estou aqui implementando uma solução para uma empresa em Java… …Lembrei das minhas aulas de orientação a objeto onde o professor dizia que as instancias deveriam ser carregadas do banco de dados no mapa ao iniciar ao sistema… e do mapa salvar as novas instancias no banco… …so que isso fazem uns 4 anos kkkkkkk, agora q voltei pro java. Se não me engano na época usávamos um método chamado compareTo para resolver esse problema de ordenar os mapas por valores, mas n achei meus trabalhos antigos…