Collections & Generics,
       une introduction

                            Par Didier Besset
                           ...
Collection interface
                                                 Iterable<T>
                                        ...
Utilisation d’un Iterable


        Seule façon d’accéder au contenu d’une
         collection quelconque:
              ...
Utilisation d’un Iterator

        Seule façon d’accéder et de modifier le
         contenu d’une collection quelconque:
...
Utilisation d’un Iterator dans un “for”

        Le contenu reste identique:
              for(final Iterator<T> iter =
 ...
Comparable


        Donne un ordre “naturel”:
              Interface Comparable<T> {
                         int compa...
Comparator


        Pour mettre de l’ordre dans les collections:
              Interface Comparator<T> {
               ...
Lists and Sets




        Une liste possède un ordre,
        Un Set ne contient aucun doublon.




                   ...
Lists and Sets


                                   Collection<T>



                       List<T>                       ...
Maps


        Permet un accès indexé par n’importe quel
         object:
               “buckets” adressés par le hashC...
Maps
                                Map<K,T>
                         put(K,T)
                         putAll(Map<K,T>)
...
Synchronization


      Collection type Synchronized object factory
      Collection         synchronizedCollection()
    ...
Full collection hierachy
                                                                      Collection

               ...
Full Map hierachy


                                                                             Dictionary
              ...
Boxing and auto-boxing


        Une Collection ou une Map contient des
         objects, pas des primitives,
        Us...
Convertions


        Arrays → Listes :
              MyClass[] myArray = ...;
              Collection<MyClass> measures...
“Backed” collections


        Une “feature” dangereuse des collections
         construites sur des Map:
               ...
keySet()                                 tailset()

       values()                                 tailmap()

       head...
Déclarations générique


        Déclaration pour le compilateur seulement,
        Le type “générique” n’a pas d’existe...
Différences fondamentale


        Les arrays ont accès à l’héritage:
              Number[] measures = new Integer[4];
 ...
Comment faire?


        On utilise la notation <? extends xxx>,
        Par exemple :
              List<? extends Numb...
Exemple: filtre générique
      public abstract class AbstractObjectFilter<T> {

                    private final EventLi...
Exemple: utilisation filtre


    public boolean collect(List<D> adaptedObjects,
               IObjectListModel<? extends...
Exemple: binding sur une sous-classe
    public class WayPointDifferentiator extends
    AbstractNamedAdaptationDataDiffer...
Exemple: binding sur une méthode



public abstract class AbstractAdaptationData<T>
                    implements Seriali...
Exemple: binding sur une méthode

  public <T extends AbstractAdaptationData<T>> void loadDescriptorData(
                ...
Questionaire




                                                         27
                         Hortis GRC SA - www....
Questionaire




                                                         28
                         Hortis GRC SA - www....
Questionaire




                                   ClassCastException


                                                 ...
Questionaire




                                                         30
                         Hortis GRC SA - www....
Questionaire




                                                         31
                         Hortis GRC SA - www....
Questionaire




                                                         32
                         Hortis GRC SA - www....
Questionaire




                                                         33
                         Hortis GRC SA - www....
Questionaire




                                                         34
                         Hortis GRC SA - www....
Questionaire




                                                         35
                         Hortis GRC SA - www....
Questionaire




                                                         36
                         Hortis GRC SA - www....
Questionaire




                                                         37
                         Hortis GRC SA - www....
Questionaire




                                                         38
                         Hortis GRC SA - www....
Questionaire




                                                         39
                         Hortis GRC SA - www....
Questionaire




                                                         40
                         Hortis GRC SA - www....
Questionaire




                                                         41
                         Hortis GRC SA - www....
Questionaire




                                                         42
                         Hortis GRC SA - www....
Upcoming SlideShare
Loading in …5
×

Collections&Generics

796 views

Published on

Presentation du chapttre 7 de la certification Java, donnée les 28 mars et 2 avril 2009

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

  • Be the first to like this

No Downloads
Views
Total views
796
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
17
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Collections&Generics

  1. 1. Collections & Generics, une introduction Par Didier Besset didier.besset@hortis.ch Hortis GRC SA - www.hortis.ch
  2. 2. Collection interface Iterable<T> iterator() Collection <T> add(T) addAll(Collection<T>) remove(T) Iterator<T> removeAll (Collection<T>) hasNext() retainAll (Collection<T>) next() clear() remove() contains(T) containsAll(Collection<T>) isEmpty() size() toArray() iterator() 2 Hortis GRC SA - www.hortis.ch Collections & Generics
  3. 3. Utilisation d’un Iterable  Seule façon d’accéder au contenu d’une collection quelconque:  for( final T item: collection) {  ... faire quelque chose... } 3 Hortis GRC SA - www.hortis.ch Collections & Generics
  4. 4. Utilisation d’un Iterator  Seule façon d’accéder et de modifier le contenu d’une collection quelconque: final Iterator<T> iter = collection.iterator(); while(iter.hasNext()) { final T item = iter.next(); ... faire quelque chose... if (... condition...) { iter.remove(); } } 4 Hortis GRC SA - www.hortis.ch Collections & Generics
  5. 5. Utilisation d’un Iterator dans un “for”  Le contenu reste identique: for(final Iterator<T> iter = collection.iterator(); iter.hasNext();) { final T item = iter.next(); ... faire quelque chose... if (... condition...) { iter.remove(); } } 5 Hortis GRC SA - www.hortis.ch Collections & Generics
  6. 6. Comparable  Donne un ordre “naturel”: Interface Comparable<T> { int compareTo(T o); }  Exemple pour une liste: final List<T extends Comparable<T>> myList = ... Collections.sort(myList); 6 Hortis GRC SA - www.hortis.ch Collections & Generics
  7. 7. Comparator  Pour mettre de l’ordre dans les collections: Interface Comparator<T> { int compare(T o1, To2); }  Exemple pour une liste: final List<T> myList = ... final Comparator<T> myComparator = ... Collections.sort(myList, myComparator); 7 Hortis GRC SA - www.hortis.ch Collections & Generics
  8. 8. Lists and Sets  Une liste possède un ordre,  Un Set ne contient aucun doublon. 8 Hortis GRC SA - www.hortis.ch Collections & Generics
  9. 9. Lists and Sets Collection<T> List<T> Set<T> get(int) remove(int) SortedSet<T> add(int,T) comparator() set(int,T) first() indexOf(T) last() lastIndexOf(T) subSet(T,T) subList(int,int) headSet(T) tailSet(T) 9 Hortis GRC SA - www.hortis.ch Collections & Generics
  10. 10. Maps  Permet un accès indexé par n’importe quel object:  “buckets” adressés par le hashCode,  Séparation à l’intérieur d’un “bucket” à l’aide de la méthode equals . 10 Hortis GRC SA - www.hortis.ch Collections & Generics
  11. 11. Maps Map<K,T> put(K,T) putAll(Map<K,T>) remove(K) get(K) clear() size() containsKey(K) SortedMap<K,T> containsValue(T) comparator() keySet() firstKey() values() lastKey() subMap(K,K) headMap(K) Collection<T> tailMap(K) Set<K> 11 Hortis GRC SA - www.hortis.ch Collections & Generics
  12. 12. Synchronization Collection type Synchronized object factory Collection synchronizedCollection() List synchronizedList() Set synchronizedSet() SortedSet synchronizedSortedSet() Map synchronizedMap() SortedMap synchronizedSortedMap() 12 Hortis GRC SA - www.hortis.ch Collections & Generics
  13. 13. Full collection hierachy Collection AbstractCollection List Set AbstractList AbstractSet AbstractQueue SortedSet ArrayList Vector HashSet TreeSet AbstractSequentialList Stack LinkedList 13 Hortis GRC SA - www.hortis.ch Collections & Generics
  14. 14. Full Map hierachy Dictionary Map AbstractMap Hashtable SortedMap HashMap TreeMap WeakHashMap 14 Hortis GRC SA - www.hortis.ch Collections & Generics
  15. 15. Boxing and auto-boxing  Une Collection ou une Map contient des objects, pas des primitives,  Usage correct (boxing explicite) : Collection<Integer> measures = ...; measures.add(new Integer(4));  Usage permis (boxing implicite) : measures.add(4); 15 Hortis GRC SA - www.hortis.ch Collections & Generics
  16. 16. Convertions  Arrays → Listes : MyClass[] myArray = ...; Collection<MyClass> measures = Arrays.asList(myArray); Listes → Arrays : Collection<MyClass> measures = ...; MyClass[] myArray = measures.toArray( new MyClass[measures.size()]); 16 Hortis GRC SA - www.hortis.ch Collections & Generics
  17. 17. “Backed” collections  Une “feature” dangereuse des collections construites sur des Map: keySet() tailset() values() tailmap() headset() subSet() headmap() subMap() 17 Hortis GRC SA - www.hortis.ch Collections & Generics
  18. 18. keySet() tailset() values() tailmap() headset() subSet() headmap() subMap() 18 Hortis GRC SA - www.hortis.ch Collections & Generics
  19. 19. Déclarations générique  Déclaration pour le compilateur seulement,  Le type “générique” n’a pas d’existence dans la machine virtuelle,  Un type se déclare au niveau:  de la classe,  d’une méthode (non-static ou static);  Il s’agit donc d’un simple “pattern-matching” 19 Hortis GRC SA - www.hortis.ch Collections & Generics
  20. 20. Différences fondamentale  Les arrays ont accès à l’héritage: Number[] measures = new Integer[4];  Les collections pas! List<Number> measures = new ArrayList<Integer>();  ... parce que le type de la déclaration de la collection n’existe pas en dehors du compilateur. 20 Hortis GRC SA - www.hortis.ch Collections & Generics
  21. 21. Comment faire?  On utilise la notation <? extends xxx>,  Par exemple : List<? extends Number> measures = new ArrayList<Integer>();  Par contre : Number meter = measures.get(0); Integer mm = (Integer) measures.get(1); 21 Hortis GRC SA - www.hortis.ch Collections & Generics
  22. 22. Exemple: filtre générique public abstract class AbstractObjectFilter<T> { private final EventListenerList listenerList = new EventListenerList(); public void addChangeListener(ChangeListener listener) { listenerList.add(ChangeListener.class, listener); } public void removeChangeListener(ChangeListener listener) { listenerList.remove(ChangeListener.class, listener); } protected void fireChanged() { final ChangeEvent event = new ChangeEvent(this); final Object[] listeners = listenerList.getListenerList(); for (int i = listeners.length - 2; i >= 0; i -= 2) { if (listeners[i] == ChangeListener.class) { ((ChangeListener) listeners[i + 1]).stateChanged(event); } } } public abstract boolean accept(T object); } 22 Hortis GRC SA - www.hortis.ch Collections & Generics
  23. 23. Exemple: utilisation filtre public boolean collect(List<D> adaptedObjects, IObjectListModel<? extends D> model) { final boolean added = false; for (final D object : model) { if (filter.accept(object)) { adaptedObjects.add(object); } } return added; } 23 Hortis GRC SA - www.hortis.ch Collections & Generics
  24. 24. Exemple: binding sur une sous-classe public class WayPointDifferentiator extends AbstractNamedAdaptationDataDifferentiator<WayPoint> { public final static WayPointDifferentiator instance = new WayPointDifferentiator(); private WayPointDifferentiator() { super(); } @Override public boolean equals(final WayPoint o1, final WayPoint o2) { return super.equals(o1, o2) && (o1 == null || valueEquals(o1.getArea(), o2.getArea())); } @Override public Class<WayPoint> getObjectClass() { return WayPoint.class; } @Override protected void collectAccessors(ArrayList<String> accessorList) { super.collectAccessors(accessorList); accessorList.add(quot;ShortNamequot;); accessorList.add(quot;Wgs84Latitudequot;); accessorList.add(quot;Wgs84Longitudequot;); } } 24 Hortis GRC SA - www.hortis.ch Collections & Generics
  25. 25. Exemple: binding sur une méthode public abstract class AbstractAdaptationData<T> implements Serializable, IVersionable<T>, Comparable<T> { public static <D extends Comparable<D>> int compare(final D v1, final D v2) { if (v2 == null) { return v1 == null ? 0 : 1; } else if (v1 == null) { return -1; } return v1.compareTo(v2); } 25 Hortis GRC SA - www.hortis.ch Collections & Generics
  26. 26. Exemple: binding sur une méthode public <T extends AbstractAdaptationData<T>> void loadDescriptorData( final AdaptationDataManager manager, final AdaptationDataRepository dataRepository, final AbstractAdaptationDataDescriptor<T> _descriptor, final SubtableController _subtableController, final T selectedObject, final boolean activateSearchField) { setName(_descriptor.getName()); final ObjectTableModel<T> tableModel = _descriptor.getTableModel(manager, selectedObject); tableModel.setResourceBundle(manager.getResourceBundle()); table = new JTableWithToolTips(tableModel); table.setName(_descriptor.getName()); final String searchColumn = _descriptor.getSearchColumn(); MutableDynamicTableFilter<T> dynamicTableFilter = null; MutableDynamicTableSorter<T> dynamicTableSorter = null; final DefaultColumnFilterFactory<T> filterFactory = _descriptor.getFilterFactory(manager); 26 Hortis GRC SA - www.hortis.ch Collections & Generics
  27. 27. Questionaire 27 Hortis GRC SA - www.hortis.ch Collections & Generics
  28. 28. Questionaire 28 Hortis GRC SA - www.hortis.ch Collections & Generics
  29. 29. Questionaire ClassCastException 29 Hortis GRC SA - www.hortis.ch Collections & Generics
  30. 30. Questionaire 30 Hortis GRC SA - www.hortis.ch Collections & Generics
  31. 31. Questionaire 31 Hortis GRC SA - www.hortis.ch Collections & Generics
  32. 32. Questionaire 32 Hortis GRC SA - www.hortis.ch Collections & Generics
  33. 33. Questionaire 33 Hortis GRC SA - www.hortis.ch Collections & Generics
  34. 34. Questionaire 34 Hortis GRC SA - www.hortis.ch Collections & Generics
  35. 35. Questionaire 35 Hortis GRC SA - www.hortis.ch Collections & Generics
  36. 36. Questionaire 36 Hortis GRC SA - www.hortis.ch Collections & Generics
  37. 37. Questionaire 37 Hortis GRC SA - www.hortis.ch Collections & Generics
  38. 38. Questionaire 38 Hortis GRC SA - www.hortis.ch Collections & Generics
  39. 39. Questionaire 39 Hortis GRC SA - www.hortis.ch Collections & Generics
  40. 40. Questionaire 40 Hortis GRC SA - www.hortis.ch Collections & Generics
  41. 41. Questionaire 41 Hortis GRC SA - www.hortis.ch Collections & Generics
  42. 42. Questionaire 42 Hortis GRC SA - www.hortis.ch Collections & Generics

×