C OMP 110/401 C OLLECTION K INDS Instructor: Prasun Dewan
Slide 3
2 P REREQUISITE Arrays Collections Implementation
Slide 4
3 S TATIC VS. D YNAMIC S TRUCTURES Static Beans have fixed
number of properties Arrays have fixed number of elements Though an
array variable can be assigned arrays of different sizes
Slide 5
4 H ISTORY public interface StringHistory { public void
addElement(String element); public int size(); public String
elementAt( int index); }
Slide 6
5 D ATABASE public interface StringDatabase { //from history
public int size(); public void addElement(String element); public
String elementAt( int index); //additional methods public void
removeElement(String element); public boolean member(String
element); public void clear(); } Do we need a history if we have a
database? Yes, principle of least privilege
Slide 7
6 P RINCIPLE OF L EAST P RIVILEGE Do not give a user of some
code more rights than it needs Code is easier to change Need to
learn less to use code Less likelihood of accidental or malicious
damage to program Like hiding engine details from car driver
Slide 8
7 U SING D ATABASE AS H ISTORY public interface StringDatabase
{ //from history public int size(); public void addElement(String
element); public String elementAt( int index); //additional methods
public void removeElement(String element); public boolean
member(String element); public void clear(); } Programmer would be
able to perform inappropriate operations on a logical history
implemented physically as a database
Slide 9
8 C O -E XISTENCE public interface StringDatabase extends
StringHistory { //additional methods public void
removeElement(String element); public boolean member(String
element); public void clear(); } Programmer would be able to
perform inappropriate operations on a logical history implemented
physically as a database
Slide 10
9 V ECTOR : G ENERAL O BJECT C OLLECTION public final int
size(); public final Object elementAt(int index); public final void
addElement(Object obj) ; public final void setElementAt(Object obj,
int index); public final void insertElementAt(Object obj, int
index); public final boolean removeElement(Object obj); public
final void removeElementAt( int index); public final int
indexOf(Object obj); Do we need other collections if we have Vector
Yes, principle of least privilege Yes, implementation
considerations
Slide 11
10 C LASS A RRAY L IST A ND V ECTOR (L IST ) public final int
size(); public final Object get(int index); public final void
add(Object obj) ; public final void set(int index, Object obj);
public final void insert( int index, Object obj); public final
boolean remove(Object obj); public final void remove( int index);
public final int indexOf(Object obj); Vector has ArrayList (List)
methods plus the additional original methods in the previous slides
Can add arbitrary objects to these collections
Slide 12
11 A RRAY L IST AND V ECTOR U SER import java.util.ArrayList;
import java.util.List; import java.util.Vector; public class
VectorArrayListUser { public static void main (String[] args) {
List names = new Vector(); List grandSlams = new ArrayList();
names.add("Nadal"); grandSlams.add(11); names.add("Federer");
grandSlams.add(17); names.add(Borg"); grandSlams.add(11);
names.add(Sampras"); grandSlams.add(14); } Primitive values
converted to corresponding wrapper objects
Slide 13
12 V ISUALIZING C OLLECTIONS public static void main (String[]
args) { StringHistory stringHistory = new AStringHistory();
stringHistory.addElement("James Dean");
stringHistory.addElement("Joe Doe"); stringHistory.addElement("Jane
Smith"); stringHistory.addElement("John Smith");
ObjectEditor.edit(stringHistory); } public interface StringHistory
{ public void addElement(String element); public int size(); public
String elementAt( int index); }
Slide 14
13 C ONVENTIONS FOR V ARIABLE -S IZED C OLLECTION
@StructurePattern(StructurePatternNames.VECTOR_PATTERN) public
interface C{ public T elementAt ( int index); public int size();
public Any setElementAt(T t, int index); } Arbitrary Type. Read
methods Write method (optional) Convention based on Vector
Unconstrained Type (void or T in practice)
Slide 15
14 @StructurePattern(StructurePatternNames.LIST_PATTERN) public
interface C { public T get ( int index); public int size(); public
Any set ( int index) T 2); } A LTERNATIVE C ONVENTIONS FOR V
ARIABLE -S IZED C OLLECTION Arbitrary Type. Read methods Write
method (optional) Unconstrained Type (void or T in practice)
Convention based on ArrayList
Slide 16
15 R EAD VS. W RITE M ETHODS Read Methods Used to get
components of object Getter methods size(), elementAt() Write
Methods Used to change components of object Setter methods
addElement(), removeElement(), setElementAt() some used by Object
Editor Distinction independent of conventions Conventions used in
Object Editor
Slide 17
16 C ONVENTIONS FOR V ARIABLE -S IZED C OLLECTION public
interface PointHistory { public void addElement ( int x, int y);
public Point elementAt ( int index); public int size(); } Read
Methods Write Method not recognized by OE Arbitrary Type
Slide 18
17 AP OINT H ISTORY Variable-sized Collection History Methods
added to menu associated with class Graphic elements of dynamic
collections added at their (X, Y) locations
Slide 19
18 I MPORTANT V ARIABLE S IZED C OLLECTIONS Variable-sized
collections History Orders elements Allows retrieval, addition but
not replacement or deletion Point History, String History Database
May order elements Allows retrieval, search, addition, insertion,
and unconstrained removal StringDatabase (did not but should have
supported insertion) Sets No duplicates Other collection
kinds?
Slide 20
19 S TACK : L AST IN F IRST O UT public interface StringStack {
public boolean isEmpty(); public String getTop(); public void
push(String element); public void pop(); } public interface
StringStack { public boolean isEmpty(); public String getTop();
public void push(String element); public void pop(); } StringStack
stringStack = new AStringStack(); stringStack.push("James Dean");
stringStack.push("Joe Doe"); stringStack.push("Jane Smith");
stringStack.push("John Smith");
System.out.println(stringStack.getTop()); stringStack.pop();
System.out.println(stringStack.getTop()); John Smith Jane
Smith
Slide 21
20 Q UEUE : F IRST IN F IRST O UT public interface StringStack
{ public boolean isEmpty(); public String getTop(); public void
push(String element); public void pop(); } public interface
StringQueue { public boolean isEmpty(); public String getHead();
public void enqueue(String element); public void dequeue(); }
StringQueue stringQ = new AStringQueue(); stringQ.enqueue("James
Dean"); stringQ.enqueue("Joe Doe"); stringQ.enqueue("Jane Smith");
stringQ.enqueue("John Smith");
System.out.println(stringStack.getHead()); stringQ.dequeue();
System.out.println(stringStack.getHead()); James Dean Joe Doe
Slide 22
21 D ISPLAYING S TACK (LIFO) public interface StringStack {
public boolean isEmpty(); public String getTop(); public void
push(String element); public void pop(); } StringStack stringStack
= new AStringStack(); stringStack.push("James Dean");
stringStack.push("Joe Doe"); stringStack.push("Jane Smith");
stringStack.push("John Smith"); ObjectEditor.edit(stringStack);
Does not provide read methods for reading all elements
Slide 23
22 D ISPLAYING T RANSPARENT S TACK (LIFO) public interface
TransparentStringStack { public int size(); public String get(int
index); public void push(String element); public void pop(); }
StringStack stringStack = new AStringStack();
stringStack.push("James Dean"); stringStack.push("Joe Doe");
stringStack.push("Jane Smith"); stringStack.push("John Smith");
bus.uigen.ObjectEditor.edit(stringStack); Provides read methods
following OE collection conventions Can provide additional method
for top value
Slide 24
23 A RRAY L IST AND V ECTOR U SER import java.util.ArrayList;
import java.util.List; import java.util.Vector; public class
VectorArrayListUser { public static void main (String[] args) {
List names = new Vector(); List grandSlams = new ArrayList();
names.add("Nadal"); grandSlams.add(11); names.add("Federer");
grandSlams.add(17); names.add("Djokovic"); grandSlams.add(5);
names.add(Borg"); grandSlams.add(11); } What kind of dynamic
structure is being simulated?
Slide 25
24 I NDEXED C OLLECTIONS Each element identified by a unique
index Like array indices, collection indices are consecutive
Highest index Lowest Index = size -1 public interface
TransparentStringStack { public int size(); public String get(int
index); public void push(String element); public void pop(); }
Slide 26
25 T ABLES Each element identified by a unique object called a
key Usually strings are used as keys
Slide 27
26 H ASH M AP (I MPLEMENT M AP ) // associates key with value,
returning last value associated with key public final Object put
(Object key, Object value); // returns last value associated with
key, or null if no association public final Object get (Object
key);
Slide 28
27 H ASH M AP U SE public static void main (String[] args) {
Map aMap = new HashMap(); aMap.put("Nadal", 10);
aMap.put("Federer", 17); aMap.put("Sampras", 14);
System.out.println(aMap.get("Nadal"));
System.out.println(aMap.get("nadal")); aMap.put("Nadal", 11);
System.out.println(aMap.get("Nadal")); ObjectEditor.edit(aMap);
}
Slide 29
28 OE C ONVENTIONS F OR T ABLE Necessary but not sufficient to
displays all keys and elements // associates key with value,
returning last value associated with key public put ( key, value);
// returns last value associated with key, or null if no
association public get ( key); // optional, removes associated
value, and returns it or null public remove( key);
Slide 30
29 E XTRA S LIDES
Slide 31
30 INDEX O F (S TRING ELEMENT ) James Dean Joe Doe Jane Smith
arraysize indexOf(James Dean); 0 index Jane Smith 4 John Smith
Slide 32
31 V ISUALIZATION OF V ARIABLE -S IZED C OLLECTIONS public
interface StringHistory { public void addElement(String element);
public int size(); public String elementAt( int index); } public
interface StringDatabase { //from history public int size(); public
void addElement(String element); public String elementAt( int
index); //additional methods public void removeElement(String
element); public boolean member(String element); public void
clear(); }
Slide 33
32 S TRING D ATABASE C OMMANDS
Slide 34
33 G ENERIC L IST : V ECTOR java.util.List strings = new
java.util.Vector(); James Dean Joe Doe strings.addJames Dean)
strings.add(Joe Doe)
Slide 35
34 A RRAY L IST ( JAVA. UTIL.A RRAY L IST ) AND L IST ( JAVA.
UTIL.L IST ) java.util.List strings = new java.util.ArrayList();
James Dean Joe Doe strings.add(James Dean) strings.add(Joe
Doe)
Slide 36
35 V ISUALIZATION OF V ARIABLE -S IZED C OLLECTIONS public
class AStringDatabase implements StringHistory { public final int
MAX_SIZE = 50; String[] contents = new String[MAX_SIZE]; int size =
0; public int size() { return size;} public String elementAt ( int
index) { return contents[index]; } boolean isFull() { return size
== MAX_SIZE; } public void addElement(String element) { } public
void removeElement(String element) {}; public boolean member(String
element) {}; public void clear() {}; }
Slide 37
36 I MPORTANT V ARIABLE S IZED C OLLECTIONS Variable-sized
collections History Orders elements Allows retrieval, addition but
not replacement or deletion Point History, String History Database
May order elements Allows retrieval, search, addition, insertion,
and unconstrained removal StringDatabase (did not but should have
supported insertion)