cse 2221 - setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.set.pdfset • the ....
TRANSCRIPT
![Page 1: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/1.jpg)
Set
7 January 2019 OSU CSE 1
![Page 2: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/2.jpg)
Set
• The Set component family allows you to manipulate finite sets of elements of any (arbitrary) type
7 January 2019 OSU CSE 2
![Page 3: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/3.jpg)
Interfaces and Classes
7 January 2019 OSU CSE 3
Set
Set1L
implements implements
SetKernel
extends
Standard
extends
Set2 Set3
![Page 4: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/4.jpg)
Interfaces and Classes
7 January 2019 OSU CSE 4
Set
Set1L
implements implements
SetKernel
extends
Standard
extends
Set2 Set3
Standard has contracts for three methods:
clearnewInstancetransferFrom
![Page 5: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/5.jpg)
Interfaces and Classes
7 January 2019 OSU CSE 5
Set
Set1L
implements implements
SetKernel
extends
Standard
extends
Set2 Set3
SetKernelhas contracts for five methods:
addremove
removeAnycontainssize
![Page 6: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/6.jpg)
Interfaces and Classes
7 January 2019 OSU CSE 6
Set
Set1L
implements implements
SetKernel
extends
Standard
extends
Set2 Set3
Sethas contracts for two other
methods:add
remove
![Page 7: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/7.jpg)
Mathematical Model
• The value of a Set variable is modeled as a (finite) set of elements of type T
• Formally:type Set is modeled by
finite set of T
7 January 2019 OSU CSE 7
![Page 8: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/8.jpg)
Constructors
• There is one constructor for each implementation class for Set
• As always:– The name of the constructor is the name of
the implementation class– The constructor has its own contract (which is
in the kernel interface SetKernel)
7 January 2019 OSU CSE 8
![Page 9: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/9.jpg)
No-argument Constructor
• Ensures:this = { }
7 January 2019 OSU CSE 9
![Page 10: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/10.jpg)
Example
7 January 2019 OSU CSE 10
Code State
Set<Integer> si =new Set1L<>();
![Page 11: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/11.jpg)
Example
7 January 2019 OSU CSE 11
Code State
Set<Integer> si =new Set1L<>();
si = { }
![Page 12: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/12.jpg)
Methods for Set
• All the methods for Set are instance methods, i.e., you call them as follows:s.methodName(arguments)
where s is an initialized non-null variable of type Set<T> for some T
7 January 2019 OSU CSE 12
![Page 13: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/13.jpg)
add
void add(T x)
• Adds x to this.• Aliases: reference x• Updates: this• Requires:x is not in this
• Ensures:this = #this union {x}
7 January 2019 OSU CSE 13
![Page 14: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/14.jpg)
Example
7 January 2019 OSU CSE 14
Code Statesi = { 49, 3 }k = 70
si.add(k);
![Page 15: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/15.jpg)
Example
7 January 2019 OSU CSE 15
Code Statesi = { 49, 3 }k = 70
si.add(k);
si = { 49, 3, 70 }k = 70
![Page 16: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/16.jpg)
Example
7 January 2019 OSU CSE 16
Code Statesi = { 49, 3 }k = 70
si.add(k);
si = { 49, 3, 70 }k = 70
Note the aliasing here between the “70s”, not
shown in the tracing table but visible if you draw a diagram of this situation.
![Page 17: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/17.jpg)
remove
T remove(T x)
• Removes x from this, and returns it.• Updates: this• Requires:x is in this
• Ensures:this = #this \ {x} andremove = x
7 January 2019 OSU CSE 17
![Page 18: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/18.jpg)
Example
7 January 2019 OSU CSE 18
Code Statesi = { 49, 3, 70 }k = 3m = -17
m = si.remove(k);
![Page 19: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/19.jpg)
Example
7 January 2019 OSU CSE 19
Code Statesi = { 49, 3, 70 }k = 3m = -17
m = si.remove(k);
si = { 49, 70 }k = 3m = 3
![Page 20: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/20.jpg)
Example
7 January 2019 OSU CSE 20
Code Statesi = { 49, 3, 70 }k = 3m = -17
m = si.remove(k);
si = { 49, 70 }k = 3m = 3
The precondition for remove (x is in this)is satisfied whether or not there is aliasing involving the “3s” in this situation.
Why?
![Page 21: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/21.jpg)
removeAny
T removeAny()
• Removes and returns an arbitrary element from this.
• Updates: this• Requires:|this| > 0
• Ensures:removeAny is in #this andthis = #this \ {removeAny}
7 January 2019 OSU CSE 21
![Page 22: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/22.jpg)
Example
7 January 2019 OSU CSE 22
Code Statesi = { 49, 3, 70 }k = 134
k = si.removeAny();
![Page 23: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/23.jpg)
Example
7 January 2019 OSU CSE 23
Code Statesi = { 49, 3, 70 }k = 134
k = si.removeAny();
si = { 3, 70 }k = 49
![Page 24: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/24.jpg)
Example
7 January 2019 OSU CSE 24
Code Statesi = { 49, 3, 70 }k = 134
k = si.removeAny();
si = { 3, 70 }k = 49
Other possible outcomes are:si = { 49, 70 }
k = 3or:
si = { 49, 3 }k = 70
![Page 25: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/25.jpg)
contains
boolean contains(T x)
• Reports whether x is in this.• Ensures:contains = (x is in this)
7 January 2019 OSU CSE 25
![Page 26: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/26.jpg)
Example
7 January 2019 OSU CSE 26
Code Statesi = { 49, 3, 70 }k = –58
boolean b =si.contains(k);
![Page 27: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/27.jpg)
Example
7 January 2019 OSU CSE 27
Code Statesi = { 49, 3, 70 }k = –58
boolean b =si.contains(k);
si = { 49, 3, 70 }k = –58b = false
![Page 28: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/28.jpg)
Example
7 January 2019 OSU CSE 28
Code Statesi = { 49, 3, 70 }k = 70
boolean b =si.contains(k);
![Page 29: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/29.jpg)
Example
7 January 2019 OSU CSE 29
Code Statesi = { 49, 3, 70 }k = 70
boolean b =si.contains(k);
si = { 49, 3, 70 }k = 70b = true
![Page 30: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/30.jpg)
Example
7 January 2019 OSU CSE 30
Code Statesi = { 49, 3, 70 }k = 70
boolean b =si.contains(k);
si = { 49, 3, 70 }k = 70b = true
The condition checked by contains (x is in this)
is satisfied whether or not there is aliasing involving the
“70s” in this situation.Why?
![Page 31: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/31.jpg)
size
int size()
• Reports the size (cardinality) of this.• Ensures:size = |this|
7 January 2019 OSU CSE 31
![Page 32: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/32.jpg)
Example
7 January 2019 OSU CSE 32
Code Statesi = { 49, 3, 70 }n = –45843
n = si.size();
![Page 33: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/33.jpg)
Example
7 January 2019 OSU CSE 33
Code Statesi = { 49, 3, 70 }n = –45843
n = si.size();
si = { 49, 3, 70 }n = 3
![Page 34: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/34.jpg)
Overloading• A method with the same name as another
method, but with a different parameter profile (number, types, and order of formal parameters) is said to be overloaded
• A method may not be overloaded on the basis of its return type
• Java disambiguates between overloaded methods based on the number, types, and order of arguments at the point of a call
7 January 2019 OSU CSE 34
![Page 35: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/35.jpg)
add
void add(Set<T> s)
• Adds to this all elements of s that are not already in this, also removing just those elements from s.
• Updates: this, s• Ensures:this = #this union #s ands = #this intersection #s
7 January 2019 OSU CSE 35
![Page 36: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/36.jpg)
add
void add(Set<T> s)
• Adds to this all elements of s that are not already in this, also removing just those elements from s.
• Updates: this, s• Ensures:this = #this union #s ands = #this intersection #s
7 January 2019 OSU CSE 36
The add method for receivers of type Set<T> is overloaded:
• one method takes an argument of type T, and
• one method takes an argument of type Set<T>.
![Page 37: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/37.jpg)
Example
7 January 2019 OSU CSE 37
Code States1 = { 1, 2, 3, 4 }s2 = { 3, 4, 5, 6}
s1.add(s2);
![Page 38: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/38.jpg)
Example
7 January 2019 OSU CSE 38
Code States1 = { 1, 2, 3, 4 }s2 = { 3, 4, 5, 6}
s1.add(s2);
s1 = { 1, 2, 3, 4, 5, 6 }s2 = { 3, 4 }
![Page 39: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/39.jpg)
Example
7 January 2019 OSU CSE 39
Code States1 = { 1, 2, 3, 4 }s2 = { 3, 4, 5, 6}
s1.add(s2);
s1 = { 1, 2, 3, 4, 5, 6 }s2 = { 3, 4 }
In other words, this moves all elements of #s2 \ #s1
from s2 into s1;it “conserves” objects of type T.
![Page 40: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/40.jpg)
remove
Set<T> remove(Set<T> s)
• Removes from this all elements of s that are also in this, leaving s unchanged, and returns the elements actually removed.
• Updates: this• Ensures:this = #this \ s andremove = #this intersection s
7 January 2019 OSU CSE 40
![Page 41: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/41.jpg)
remove
Set<T> remove(Set<T> s)
• Removes from this all elements of s that are also in this, leaving s unchanged, and returns the elements actually removed.
• Updates: this• Ensures:this = #this \ s andremove = #this intersection s
7 January 2019 OSU CSE 41
The remove method for receivers of type Set<T> is overloaded:
• one method takes an argument of type T, and
• one method takes an argument of type Set<T>.
![Page 42: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/42.jpg)
Example
7 January 2019 OSU CSE 42
Code States1 = { 1, 2, 3, 4 }s2 = { 3, 4, 5, 6}s3 = { 10 }
s3 = s1.remove(s2);
![Page 43: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/43.jpg)
Example
7 January 2019 OSU CSE 43
Code States1 = { 1, 2, 3, 4 }s2 = { 3, 4, 5, 6}s3 = { 10 }
s3 = s1.remove(s2);
s1 = { 1, 2 }s2 = { 3, 4, 5, 6}s3 = { 3, 4 }
![Page 44: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/44.jpg)
Example
7 January 2019 OSU CSE 44
Code States1 = { 1, 2, 3, 4 }s2 = { 3, 4, 5, 6}s3 = { 10 }
s3 = s1.remove(s2);
s1 = { 1, 2 }s2 = { 3, 4, 5, 6}s3 = { 3, 4 }
In other words, this “conserves” all elements of #s1 and #s2;
they all wind up in some Set<T>rather than being “lost”.
![Page 45: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/45.jpg)
Iterating Over a Set
• Suppose you want to do something with each of the elements of a Set<T> s
• How might you do that?
7 January 2019 OSU CSE 45
![Page 46: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/46.jpg)
Iterating With removeAnySet<T> temp = s.newInstance();
temp.transferFrom(s);
while (temp.size() > 0) {
T x = temp.removeAny();
// do something with x
s.add(x);
}
7 January 2019 OSU CSE 46
![Page 47: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/47.jpg)
Iterating With removeAnySet<T> temp = s.newInstance();
temp.transferFrom(s);
while (temp.size() > 0) {
T x = temp.removeAny();
// do something with x
s.add(x);
}
7 January 2019 OSU CSE 47
Recall that newInstance returns a new object of the same object type (dynamic type) as the receiver, as if it were a no-argument constructor;
but we don’t need to know the object type of s to get this new object.
![Page 48: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/48.jpg)
Iterating With removeAnySet<T> temp = s.newInstance();
temp.transferFrom(s);
while (temp.size() > 0) {
T x = temp.removeAny();
// do something with x
s.add(x);
}
7 January 2019 OSU CSE 48
Why transferFrom rather than copyFrom?
• Performance: there is no need for a copy, and transferFrom is far more efficient.
• We really want s to be empty to start the iteration, and this does it.
![Page 49: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/49.jpg)
Iterating With removeAny
• This code has the following properties:– It introduces no dangerous aliases, so it is relatively
easy to reason about; just think about values, not references
– If what you want to do with each element is to change it, then the approach works because you may change the value of x each time through the loop body
– It is reasonably efficient (making no copies of elements of type T, though it does use removeAnyand add, and these could be slow)
7 January 2019 OSU CSE 49
![Page 50: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/50.jpg)
Iterating With removeAny
• This code has the following properties:– It introduces no dangerous aliases, so it is relatively
easy to reason about; just think about values, not references
– If what you want to do with each element is to change it, then the approach works because you may change the value of x each time through the loop body
– It is reasonably efficient (making no copies of elements of type T, though it does use removeAnyand add, and these could be slow)
7 January 2019 OSU CSE 50
It does introduce an alias(where?)
but it is of no consequence(why?).
![Page 51: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/51.jpg)
Iterators
• Conventional Java style for iterating over a “collection” like a Set is to use an iteratorso you can do this without taking the collection apart and reconstituting it
7 January 2019 OSU CSE 51
![Page 52: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/52.jpg)
One More Interface
7 January 2019 OSU CSE 52
Set
Set1L
implements implements
SetKernel
extends
Standard
extends
Set2 Set3
Iterable
extends
![Page 53: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/53.jpg)
One More Interface
7 January 2019 OSU CSE 53
Set
Set1L
implements implements
SetKernel
extends
Standard
extends
Set2 Set3
Iterable
extends
Iterable has a contract for one method:iterator
![Page 54: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/54.jpg)
iterator
Iterator<T> iterator()
• Returns an iterator over a set of elements of type T.
• Ensures:entries(~this.seen * ~this.unseen) = this
and|~this.seen * ~this.unseen| = |this|
7 January 2019 OSU CSE 54
![Page 55: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/55.jpg)
iterator
Iterator<T> iterator()
• Returns an iterator over a set of elements of type T.
• Ensures:entries(~this.seen * ~this.unseen) = this
and|~this.seen * ~this.unseen| = |this|
7 January 2019 OSU CSE 55
Iterator is yet another interface in the
Java libraries (in the package java.util).
![Page 56: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/56.jpg)
iterator
Iterator<T> iterator()
• Returns an iterator over a set of elements of type T.
• Ensures:entries(~this.seen * ~this.unseen) = this
and|~this.seen * ~this.unseen| = |this|
7 January 2019 OSU CSE 56
We will return to decipher the contract
after seeing the easiest way for this method to
be used...
![Page 57: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/57.jpg)
For-Each Loops
• Since Set<T> extends the interface Iterable (so it inherits the iteratormethod), you may write a for-each loop to “see” all elements of Set<T> s :for (T x : s) {
// do something with x, but do
// not call methods on s, or
// change the value of x or s
}
7 January 2019 OSU CSE 57
![Page 58: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/58.jpg)
For-Each Loops
• Since Set<T> extends the interface Iterable (so it inherits the iteratormethod), you may write a for-each loop to “see” all elements of Set<T> s :for (T x : s) {
// do something with x, but do
// not call methods on s, or
// change the value of x or s
}
7 January 2019 OSU CSE 58
This declares x as a local variable of type T in the loop;
on each iteration, x is aliased to a different element
of s.
![Page 59: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/59.jpg)
For-Each Loop Example• Count the number of strings of length 5 in a Set<String>:Set<String> dictionary = …...int count = 0;for (String word : dictionary) {
if (word.length() == 5) {count++;
}}
7 January 2019 OSU CSE 59
![Page 60: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/60.jpg)
In Which Order?
• The kernel interface (SetKernel in this case) contains the contract for the iterator method, as specialized for the type Set<T>
• This contract specifies the order in which the elements are seen
7 January 2019 OSU CSE 60
![Page 61: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/61.jpg)
iterator Contract
• Two new mathematical variables are involved in the contract:– The string of T called ~this.seen
contains, in order, those values already “seen” in the for-each loop iterations up to any point
– The string of T called ~this.unseencontains, in order, those values not yet “seen” in the for-each loop iterations up to that point
7 January 2019 OSU CSE 61
![Page 62: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/62.jpg)
iterator
Iterator<T> iterator()
• Returns an iterator over a set of elements of type T.
• Ensures:entries(~this.seen * ~this.unseen) = this
and|~this.seen * ~this.unseen| = |this|
7 January 2019 OSU CSE 62
![Page 63: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/63.jpg)
iterator
Iterator<T> iterator()
• Returns an iterator over a set of elements of type T.
• Ensures:entries(~this.seen * ~this.unseen) = this
and|~this.seen * ~this.unseen| = |this|
7 January 2019 OSU CSE 63
The concatenation of the string of T values
already seen and the values not yet seen...
![Page 64: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/64.jpg)
iterator
Iterator<T> iterator()
• Returns an iterator over a set of elements of type T.
• Ensures:entries(~this.seen * ~this.unseen) = this
and|~this.seen * ~this.unseen| = |this|
7 January 2019 OSU CSE 64
The finite set of T of values already seen and not
yet seen...
![Page 65: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/65.jpg)
iterator
Iterator<T> iterator()
• Returns an iterator over a set of elements of type T.
• Ensures:entries(~this.seen * ~this.unseen) = this
and|~this.seen * ~this.unseen| = |this|
7 January 2019 OSU CSE 65
The finite set of T of values already seen and not
yet seen...is equal to the entire set
this.
![Page 66: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/66.jpg)
iterator
Iterator<T> iterator()
• Returns an iterator over a set of elements of type T.
• Ensures:entries(~this.seen * ~this.unseen) = this
and|~this.seen * ~this.unseen| = |this|
7 January 2019 OSU CSE 66
What else must be said?What does the second clause mean?
Why is it important?
![Page 67: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/67.jpg)
Iterating With iterator
• The for-each code has the following properties:– It introduces aliases, so you must be careful to “follow
the rules”; specifically, the loop body should not call any methods on s
– If what you want to do to each element is to change it (when T is a mutable type), then the approach does not work because the loop body should not change x
– It may be more efficient than using removeAny (i.e., it also makes no copies of elements of type T, though it does use iterator methods to carry out the for-each loop, and these could be slow)
7 January 2019 OSU CSE 67
![Page 68: CSE 2221 - Setweb.cse.ohio-state.edu/software/2221/web-sw1/extras/slides/29.Set.pdfSet • The . Set. component family allows you to manipulate finite sets of elements of any (arbitrary)](https://reader030.vdocuments.mx/reader030/viewer/2022040816/5e5fcd6b58ff4b1ee1278644/html5/thumbnails/68.jpg)
Resources
• OSU CSE Components API: Set– http://cse.osu.edu/software/common/doc/
• Java Libraries API: Iterable andIterator– http://docs.oracle.com/javase/8/docs/api/
7 January 2019 OSU CSE 68