Your SlideShare is downloading. ×
Collections&Generics
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Collections&Generics

661
views

Published on

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

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
661
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Collections & Generics, une introduction Par Didier Besset didier.besset@hortis.ch Hortis GRC SA - www.hortis.ch
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Full Map hierachy Dictionary Map AbstractMap Hashtable SortedMap HashMap TreeMap WeakHashMap 14 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 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. 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. “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. keySet() tailset() values() tailmap() headset() subSet() headmap() subMap() 18 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 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. 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. 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. 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. 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. 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. 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. 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. Questionaire 27 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 28. Questionaire 28 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 29. Questionaire ClassCastException 29 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 30. Questionaire 30 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 31. Questionaire 31 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 32. Questionaire 32 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 33. Questionaire 33 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 34. Questionaire 34 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 35. Questionaire 35 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 36. Questionaire 36 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 37. Questionaire 37 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 38. Questionaire 38 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 39. Questionaire 39 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 40. Questionaire 40 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 41. Questionaire 41 Hortis GRC SA - www.hortis.ch Collections & Generics
  • 42. Questionaire 42 Hortis GRC SA - www.hortis.ch Collections & Generics