Usando melhor as Collections

1,129 views

Published on

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

http://github.com/caelum/conexaojava

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,129
On SlideShare
0
From Embeds
0
Number of Embeds
26
Actions
Shares
0
Downloads
25
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

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

×