Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Usando melhor as Collections

Palestra dada no Conexão Java 2012 sobre Collections no Java. Os códigos finais podem ser encontrados em:

http://github.com/caelum/conexaojava

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Usando melhor as Collections

  1. 1. Recapitulando... public class Onibus { private String nome; private String linha; public Onibus(String nome, String linha) { this.nome = nome; this.linha = linha; } // getters }
  2. 2. Recapitulando... public class Onibus { private String nome; private String linha; public Onibus(String nome, String linha) { this.nome = nome; this.linha = linha; } // getters }
  3. 3. Recapitulando...
  4. 4. Peraí! Estávamos Recapitulando...
  5. 5. public class PontoDeOnibus { private String nome; private double latitude; Recapitulando... private double longitude; private ArrayList<Onibus> onibuses; public PontoDeOnibus(String nome, double latitude, double longitude) { this.____ = ____; this.onibuses = new ArrayList<Onibus>(); } // getters // adiciona e passa}
  6. 6. public class PontoDeOnibus { private String nome; private double latitude; Recapitulando... private double longitude; private ArrayList<Onibus> onibuses; public PontoDeOnibus(String nome, double latitude, double longitude) { this.____ = ____; this.onibuses = new ArrayList<Onibus>(); } // getters // adiciona e passa}
  7. 7. public class PontoDeOnibus { Biza private String nome;rro! Recapitulando... private double latitude; private double longitude; private ArrayList<Onibus> onibuses; public PontoDeOnibus(String nome, double latitude, double longitude) { this.____ = ____; this.onibuses = new ArrayList<Onibus>(); } // getters // adiciona e passaOnibus}
  8. 8. public class PontoDeOnibus { Biza private String nome;rro! Recapitulando... private double latitude; private double longitude; private ArrayList<Onibus> onibuses; public PontoDeOnibus(String nome, double latitude, double longitude) { Ninguém this.____ = ____; faz = new ArrayList<Onibus>(); this.onibuses } assim! // getters // adiciona e passa}
  9. 9. Por que não?
  10. 10. Entendendo melhor as Collections Cecilia Fernandes @cecifernandes github.com/ceci
  11. 11. Antes decomeçarmos...
  12. 12. public class PontoDeOnibus { private String nome; private double latitude; private double longitude; private ArrayList<Onibus> onibuses; public PontoDeOnibus(String nome, double latitude, double longitude) { // ... this.onibuses = new ArrayList<Onibus>(); } // getters // adiciona e passa}
  13. 13. public class PontoDeOnibus { private String nome; private double latitude; localizacao private double longitude; private ArrayList<Onibus> onibuses; public PontoDeOnibus(String nome, double latitude, double longitude) { // ... this.onibuses = new ArrayList<Onibus>(); } // getters // adiciona e passa}
  14. 14. public class PontoDeOnibus { private String nome; private Coordenada localizacao; private ArrayList<Onibus> onibuses; public PontoDeOnibus(String nome, Coordenada localizacao) { // ... this.onibuses = new ArrayList<Onibus>(); } // getters // adiciona e passa}
  15. 15. Agora sim!
  16. 16. public class PontoDeOnibus { private String nome; private Coordenada localizacao; private ArrayList<Onibus> onibuses; public PontoDeOnibus(String nome, Coordenada localizacao) { // ... this.onibuses = new ArrayList<Onibus>(); } // getters // adiciona e passa}
  17. 17. public class PontoDeOnibus { private String nome; private Coordenada localizacao; private ArrayList<Onibus> onibuses; public PontoDeOnibus(String nome, Coordenada localizacao) { // ... this.onibuses = new ArrayList<Onibus>(); } // getters // adiciona e passa}
  18. 18. private ArrayList<Onibus>
  19. 19. private ArrayList<Onibus>private LinkedList<Onibus>
  20. 20. private ArrayList<Onibus>private LinkedList<Onibus>private Vector<Onibus>
  21. 21. Qual?private ArrayList<Onibus>private LinkedList<Onibus>private Vector<Onibus>
  22. 22. Qual?private ArrayList<Onibus> a z ! to f a nprivate LinkedList<Onibus> Tprivate Vector<Onibus>
  23. 23. Qualquer coisaque seja uma...
  24. 24. Qualquer coisaque seja uma... List
  25. 25. Qualquer coisaque seja uma... java.util.List
  26. 26. public class PontoDeOnibus { private String nome; private Coordenada localizacao; Coding private ArrayList<Onibus> onibuses; // ... time! public PontoDeOnibus(String nome, Coordenada localizacao) { this.onibuses = new ArrayList<Onibus>(); } // getters // adiciona e passaOnibus}
  27. 27. public class PontoDeOnibus { private String nome; private Coordenada localizacao; O getOnibuses private ArrayList<Onibus> onibuses; também está public PontoDeOnibus(String nome, falho... localizacao) { Coordenada // ... this.onibuses = new ArrayList<Onibus>(); } // getters // adiciona e passaOnibus}
  28. 28. Antes:public List<Onibus> getOnibuses() { return onibuses;}Depois:public List<Onibus> getOnibuses() { return Collections.unmodifiableList(onibuses);}
  29. 29. Antes:public List<Onibus> getOnibuses() { return onibuses;}Depois:public List<Onibus> getOnibuses() { return Collections.unmodifiableList(onibuses);}
  30. 30. Mas...
  31. 31. Mas... List?
  32. 32. Podia ser...
  33. 33. Set
  34. 34. TreeSet
  35. 35. TreeSet
  36. 36. TreeSet < < < < <
  37. 37. TreeSet < > < > < > > < < >
  38. 38. HashSet
  39. 39. HashSet
  40. 40. HashSet
  41. 41. HashSet?
  42. 42. HashSet
  43. 43. HashSet
  44. 44. HashSet@Overridepublic int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((linha == null) ? 0 : linha.hashCode()); return result;}
  45. 45. HashSet@Overridepublic int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((linha == null) ? 0 : linha.hashCode()); return result;}
  46. 46. HashSet
  47. 47. E aí...
  48. 48. TreeSet
  49. 49. LinkedListTreeSet
  50. 50. LinkedListTreeSet ArrayList
  51. 51. LinkedListTreeSet HashSet ArrayList
  52. 52. LinkedListTreeSet d os HashSet T o ! rv e m s e ArrayList
  53. 53. LinkedList is a r co . e HashSet al q u m a .Q uTreeSet ja u e s e qu ArrayList
  54. 54. LinkedList is a r co . e HashSet al q u m a .Q uTreeSet ja u e s e qu n c t io C l le ArrayList o
  55. 55. E aí...
  56. 56. public class TestaBusao { public static void main(String[] args) { Vamos ver... List<Onibus> onibuses = Arrays.asList( new Onibus("2002/10", "TERMINA new Onibus("2290/10", "TERMINA new Onibus("5108/10", "JARDIM C new Onibus("5111/10", "TERMINA new Onibus("5300/10", "TERMINA new Onibus("6403/10", "TERMINA new Onibus("9300/10", "TERMINA new Onibus("3539/10", "CIDADE new Onibus("3539/10", "TERMINA
  57. 57. public class TestaBusao { public static void main(String[] args) { Vamos ver... List<Onibus> onibuses = Arrays.asList( new Onibus("2002/10", "TERMINA new Onibus("2290/10", "TERMINA performance! new Onibus("5108/10", "JARDIM C new Onibus("5111/10", "TERMINA new Onibus("5300/10", "TERMINA new Onibus("6403/10", "TERMINA new Onibus("9300/10", "TERMINA new Onibus("3539/10", "CIDADE new Onibus("3539/10", "TERMINA
  58. 58. tempo Linked Array Tree Hash List List Set Set
  59. 59. Então... performance!
  60. 60. public class PontoDeOnibus { // atributos Vamos ver... // construtor public boolean passa(Onibus onibus) { for (Onibus o : this.onibuses) if (o.getLinha().equals(onibus.getLinha())) return true; return false; } public void adicionaOnibus(Onibus onibus) { if (!onibuses.contains(onibus)) {
  61. 61. public class PontoDeOnibus { // atributos Vamos ver... // construtor public boolean passa(Onibus onibus) { o adiciona! for (Onibus o : this.onibuses) if (o.getLinha().equals(onibus.getLinha())) return true; return false; } public void adicionaOnibus(Onibus onibus) { if (!onibuses.contains(onibus)) {
  62. 62. List public void adiciona (Onibus onibus) { if (! onibuses.contains(onibus)) { onibuses.add(onibus); } }Set public void adiciona (Onibus onibus) { onibuses.add(onibus); }
  63. 63. List public void adiciona (Onibus onibus) { if (! onibuses.contains(onibus)) { onibuses.add(onibus); } }Set ...e é mais rápido para buscas! public void adiciona (Onibus onibus) { onibuses.add(onibus); }
  64. 64. Cool!
  65. 65. Cool!Só vou usar Set,daqui pra frente!
  66. 66. Onibus tem...
  67. 67. public class Onibus { private String nome; private String linha; public Onibus(String nome, String linha) { this.nome = nome; this.linha = linha; } // getters}
  68. 68. public class Onibus { private String nome; private String linha; public Onibus(String nome, String linha) { this.nome = nome; this.linha = linha; } // getters}
  69. 69. public class Onibus { private String nome; private String linha; private List<PontoDeOnibus> itinerario; public Onibus(String nome, String linha, List<PontoDeOnibus> itinerario) { this.nome = nome; this.linha = linha; this.itinerario = itinerario; } // getters}
  70. 70. Cool!
  71. 71. WAIT!
  72. 72. Quero a lista de ônibusordenada?
  73. 73. public class PontoDeOnibus { private String nome; private Coordenada localizacao; Codar mais private ArrayList<Onibus> onibuses; um pouquinho! public PontoDeOnibus(String nome, // ... Coordenada localizacao) { this.onibuses = new ArrayList<Onibus>(); } // getters // adiciona e passaOnibus}
  74. 74. Comparator<Onibus>public class OrdenadoPorLinha implements Comparator<Onibus>{ @Override public int compare(Onibus o1, Onibus o2) { return o1.getLinha().compareTo(o2.getLinha()); }}
  75. 75. Comparator<Onibus>...lections.sort(onibuses, new Comparator<Onibus>{ @Override public int compare(Onibus o1, Onibus o2) { return o1.getLinha().compareTo(o2.getLinha()); }}); nô ni ma ss ea Cla
  76. 76. Cool!
  77. 77. Cool! im ! ra sA go
  78. 78. Entendendo melhor as Collections Cecilia Fernandes @cecifernandes github.com/ceci

×