Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java 2 Collections ©1999 Trygve Reenskaug

Similar presentations


Presentation on theme: "Java 2 Collections ©1999 Trygve Reenskaug"— Presentation transcript:

1 Java 2 Collections ©1999 Trygve Reenskaug
Collections in Java 2 (1.2) Compare Java Arrays with Smalltalk Collections Declaration Add and remove elements Sorting Enumeration Compare Java Arrays with Java2 Collections Summary List interface Mapinterface Conclusion Java 2 Collections ©1999 Trygve Reenskaug

2 Java 2 Collections ©1999 Trygve Reenskaug
The problem…. public class Project { Activity[] activities = new Activity[0]; public void addActivity(Activity act) { Activity[] newArr = new Activity[activities.length + 1]; System.arraycopy (activities, 0, newArr, 0, activities.length); newArr[newArr.length-1] = act; activities = newArr; } public void paintBarChart (Graphics g, Dimension extent ) { Activity[] sortedActivities = new Activity[activities.length]; System.arraycopy(activities, 0, sortedActivities, 0, activities.length); quicksortEarlyStart(sortedActivities, 0, sortedActivities.length-1); for (int i=0; i<sortedActivities.length; i++) { int start = sortedActivities[i].getEarlyStart(); int end = sortedActivities[i].getEarlyFinish(); }} Java 2 Collections ©1999 Trygve Reenskaug

3 The Smalltalk solution Class definition
public class Project { Activity[] activities = new Activity[0]; } Object subclass: # Project instanceVariableNames: ’activities' classVariableNames: '' category: ’planning2c’ initialize activities := OrderedCollection new. Java 2 Collections ©1999 Trygve Reenskaug

4 The Smalltalk solution Adding (and removing) elements
public void addActivity(Activity act) { Activity[] newArr = new Activity[activities.length + 1]; System.arraycopy (activities, 0, newArr, 0, activities.length); newArr[newArr.length-1] = act; activities = newArr; } addActivity: act activities addLast: act Java 2 Collections ©1999 Trygve Reenskaug

5 The Smalltalk solution Sorting
public void paintBarChart (Graphics g, Dimension extent ) { Activity[] sortedActivities = new Activity[activities.length]; System.arraycopy(activities, 0, sortedActivities, 0, activities.length); quicksortEarlyStart(sortedActivities, 0, sortedActivities.length-1); } private static void quicksortEarlyStart(Activity[] arr, int lo0, int hi0) { int lo, hi; Activity mid; if (hi0 > lo0) { /* 15 lines of code */ }} paintBarChart: g extention: extent sortedActivities := activities asSortedCollection: [:x :y | x earlyStart < y earlyStart]. Java 2 Collections ©1999 Trygve Reenskaug

6 The Smalltalk solution Enumeration
for (int i=0; i<sortedActivities.length; i++) { int start = sortedActivities[i].getEarlyStart(); int end = sortedActivities[i].getEarlyFinish(); ... } sortedActivities do: [:act || start end | start := act getEarlyStart. end := act getEarlyFinish. …]. Java 2 Collections ©1999 Trygve Reenskaug

7 Collection Interfaces Java 2
Variables typed on interface to be independent of concrete implementations Dictionary (key->value) Group of Objects Unordered, no duplicates Sorted Dictionary OrderedCollection Vector SortedCollection Java 2 Collections ©1999 Trygve Reenskaug

8 Collection Classes Java 2
Useful library Collection classes Hashtable (superclass: Dictionary) AbstractCollection HashSet TreeMap ArrayList TreeSet Java 2 Collections ©1999 Trygve Reenskaug

9 The Java 2 solution Class definition
public class Project { Activity[] activities; } public class Project { List activities = new ArrayList(6); } Java 2 Collections ©1999 Trygve Reenskaug

10 The Java 2 solution Adding (and removing) elements
public void addActivity(Activity act) { Activity[] newArr = new Activity[activities.length + 1]; System.arraycopy (activities, 0, newArr, 0, activities.length); newArr[newArr.length-1] = act; activities = newArr; } addActivity: act activities addLast: act Java 2 Collections ©1999 Trygve Reenskaug

11 The Java 2 solution Sorting
private static void quicksortEarlyStart(Activity[] arr, int lo0, int hi0) { int lo, hi; Activity mid; if (hi0 > lo0) { // lines of code} public List activitiesByEarlyStart() { List sortedList = new ArrayList(activities.size()); sortedList.addAll(activities); Collections.sort (sortedList , (new Comparator() { public int compare(Object o1, Object o2) { if (o1.equals(o2)) return 0; Activity a1 = (Activity) o1; Activity a2 = (Activity) o2; return a1.compareEarlyStart(a2); } }) ); return sortedList; }} Java 2 Collections ©1999 Trygve Reenskaug

12 The Java 2 solution Enumeration with for () {}
for (int i=0; i<sortedActivities.length; i++) { int start = sortedActivities[i].getEarlyStart(); int end = sortedActivities[i].getEarlyFinish(); ... } for (int i=0; i<sortedActivities.size(); i++) { Activity act = (Activity)sortedActivities.get(i); int start = act.getEarlyStart(); int end = act.getEarlyFinish(); Java 2 Collections ©1999 Trygve Reenskaug

13 The Java 2 solution Enumeration with Iterator
for (int i=0; i<sortedActivities.length; i++) { int start = sortedActivities[i].getEarlyStart(); int end = sortedActivities[i].getEarlyFinish(); ... } ListIterator iterator = sortedActivities.listIterator(); while (iterator.hasNext()) { Activity act = (Activity)iterator.next(); int start = act.getEarlyStart(); int end = act.getEarlyFinish(); Java 2 Collections ©1999 Trygve Reenskaug

14 List (ArrayList) Summary
void add(Object element) (optional operation). void add(int index, Object element) Object set(int index, Object element) (optional operation). Object get(int index) boolean addAll(Collection c) (optional operation). boolean addAll(int index, Collection c) (optional operation). Object remove(int index) Object remove(Object o) Int size() boolean isEmpty() boolean contains(Object o) int indexOf(Object o) Iterator iterator() ListIterator listIterator() List subList(int fromIndex, int toIndex) Java 2 Collections ©1999 Trygve Reenskaug

15 Map (Hashtable) Summary
Object put(Object key, Object value) (optional operation). Object get(Object key) Object remove(Object key) (optional operation). boolean isEmpty() boolean containsKey(Object key) boolean containsValue(Object value) int size() Set keySet() Collection values() Set entrySet() Java 2 Collections ©1999 Trygve Reenskaug

16 Java 2 Collections ©1999 Trygve Reenskaug
Conclusion Java 2 Collections: are flexible and powerful support changing size support general enumeration support generalized sorting use (Interfaces) is independent of implementation (Classes) think in terms of interacting objects -- not classes based on “dirty typing” - need extensive type casting I prefer them to Arrays and Vectors Java 2 Collections ©1999 Trygve Reenskaug


Download ppt "Java 2 Collections ©1999 Trygve Reenskaug"

Similar presentations


Ads by Google