UNDERSTANDING RECURSIVE CLASSES CMSC 150: Lecture 22
StringList: A Recursive Class public class StringList { // instance variables private boolean isEmpty; private String thisString; private StringList restOfStringList; // constructors public StringList() { … } public StringList(String newString, StringList aList) { … } public String toString() { … } public String getLineStartingWith(String prefix) { … } }
StringList: A Recursive Class public class StringList { // instance variables private boolean isEmpty; private String thisString; private StringList restOfStringList; // constructors public StringList() { … } public StringList(String newString, StringList aList) { … } public String toString() { … } public String getLineStartingWith(String prefix) { … } } Data
StringList: A Recursive Class public class StringList { // instance variables private boolean isEmpty; private String thisString; private StringList restOfStringList; // constructors public StringList() { … } public StringList(String newString, StringList aList) { … } public String toString() { … } public String getLineStartingWith(String prefix) { … } } Methods
StringList: A Recursive Class public class StringList { // instance variables private boolean isEmpty; private String thisString; private StringList restOfStringList; // constructors public StringList() { … } public StringList(String newString, StringList aList) { … } public String toString() { … } public String getLineStartingWith(String prefix) { … } }
StringList: In Action StringList aList = new StringList(); aList true "" toString() getLine() public class StringList { // instance variables private boolean isEmpty; private String thisString; private StringList restOfStringList; // constructors public StringList() { … } public StringList(String newString, StringList aList) { … } public String toString() { … } public String getLineStartingWith(String prefix) { … } } addr:
StringList: In Action StringList aList = new StringList(); aList true "" toString() getLine() Actually a reference to a String object, but for brevity… addr: public class StringList { // instance variables private boolean isEmpty; private String thisString; private StringList restOfStringList; // constructors public StringList() { … } public StringList(String newString, StringList aList) { … } public String toString() { … } public String getLineStartingWith(String prefix) { … } }
StringList: In Action StringList aList = new StringList(); aList = new StringList("mandolin", aList); aList true "" toString() getLine() addr:
StringList: In Action StringList aList = new StringList(); aList = new StringList("mandolin", aList); aList true "" toString() getLine() toString() getLine() false addr: addr: 48 0
StringList: In Action StringList aList = new StringList(); aList = new StringList("mandolin", aList); aList true "" toString() getLine() toString() getLine() "mandolin" false addr: addr: 48
StringList: In Action StringList aList = new StringList(); aList = new StringList("mandolin", aList); aList true "" toString() getLine() toString() getLine() "mandolin" false addr: addr: 48
StringList: In Action StringList aList = new StringList(); aList = new StringList("mandolin", aList); aList true "" toString() getLine() toString() getLine() "mandolin" false addr: addr: 48 32
StringList: In Action StringList aList = new StringList(); aList = new StringList("mandolin", aList); aList true "" toString() getLine() toString() getLine() "mandolin" false addr: addr: 48 32
StringList: In Action StringList aList = new StringList(); aList = new StringList("mandolin", aList); aList true "" toString() getLine() toString() getLine() "mandolin" false addr: addr: 48 32
StringList: In Action StringList aList = new StringList(); aList = new StringList("mandolin", aList); aList true "" toString() getLine() toString() getLine() "mandolin" false addr: addr: 48 32
StringList: In Action StringList aList = new StringList(); aList = new StringList("mandolin", aList); aList true "" toString() getLine() toString() getLine() "mandolin" false addr: addr: 48 32
StringList: In Action StringList aList = new StringList(); aList = new StringList("mandolin", aList); aList true "" toString() getLine() toString() getLine() "mandolin" false addr: addr: 48 32
StringList: In Action StringList aList = new StringList(); aList = new StringList("mandolin", aList); aList = new StringList("Lilly", aList); aList true "" toString() getLine() toString() getLine() "mandolin" false addr: addr: 48 32
StringList: In Action StringList aList = new StringList(); aList = new StringList("mandolin", aList); aList = new StringList("Lilly", aList); aList true "" toString() getLine() toString() getLine() "mandolin" false addr: addr: toString() getLine() false addr: 77 "Lilly" 48
StringList: In Action StringList aList = new StringList(); aList = new StringList("mandolin", aList); aList = new StringList("Lilly", aList); aList true "" toString() getLine() toString() getLine() "mandolin" false addr: addr: toString() getLine() false addr: 77 "Lilly" 48
StringList: In Action StringList aList = new StringList(); aList = new StringList("mandolin", aList); aList = new StringList("Lilly", aList); aList true "" toString() getLine() toString() getLine() "mandolin" false addr: addr: toString() getLine() false addr: 77 "Lilly" 48
HistoryList: A Recursive Class public class HistoryList { // instance variables private boolean isEmpty; private String firstWebSite; private HistoryList restOfWebSites; // constructors public HistoryList() { … } public HistoryList(String newSite, HistoryList aList) { … } public boolean contains(String site) { … } public String toString() { … } public HistoryList getMatches(String prefix) { … } public boolean isEmpty() { … } }
HistoryList: In Action HistoryList aList = new HistoryList(); aList = new HistoryList("cnn.com", aList); aList = new HistoryList("mlb.com", aList); aList true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty()
HistoryList: contains() method public boolean contains(String site) { if (empty) { return false; } else if (firstWebSite.equals(site)) { return true; } return restOfWebSites.contains(site); }
HistoryList: contains() boolean inList = aList.contains("cnn.com"); aList true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty()
HistoryList: contains() boolean inList = aList.contains("cnn.com"); aList true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty()
HistoryList: contains() boolean inList = aList.contains("cnn.com"); aList true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty()
HistoryList: contains() boolean inList = aList.contains("cnn.com"); aList true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty()
HistoryList: contains() boolean inList = aList.contains("cnn.com"); aList true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty()
true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() if (empty){ return false; } else if (firstWebSite.equals(site)) { return true; } return restOfWebSites.contains(site); contains() toString() getMatches() isEmpty() aList
true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty() aList if (empty){ return false; } else if (firstWebSite.equals(site)) { return true; } return restOfWebSites.contains(site);
true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty() aList if (empty){ return false; } else if (firstWebSite.equals(site)) { return true; } return restOfWebSites.contains(site);
true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty() aList if (empty){ return false; } else if (firstWebSite.equals(site)) { return true; } return restOfWebSites.contains(site);
true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty() aList if (empty){ return false; } else if (firstWebSite.equals(site)) { return true; } return restOfWebSites.contains(site);
true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty() aList if (empty){ return false; } else if (firstWebSite.equals(site)) { return true; } return restOfWebSites.contains(site);
true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty() aList if (empty){ return false; } else if (firstWebSite.equals(site)) { return true; } return restOfWebSites.contains(site);
true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty() aList if (empty){ return false; } else if (firstWebSite.equals(site)) { return true; } return restOfWebSites.contains(site);
true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty() aList if (empty){ return false; } else if (firstWebSite.equals(site)) { return true; } return restOfWebSites.contains(site); true
"" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty() aList if (empty){ return false; } else if (firstWebSite.equals(site)) { return true; } return restOfWebSites.contains(site); true
"" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty() aList if (empty){ return false; } else if (firstWebSite.equals(site)) { return true; } return restOfWebSites.contains(site); true
HistoryList: contains() boolean inList = aList.contains("cnn.com"); true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty() aList true
HistoryList: contains() boolean inList = aList.contains("cnn.com"); true "" contains() toString() getMatches() isEmpty() "cnn.com" false addr: addr: false addr: 87 "mlb.com" 58 contains() toString() getMatches() isEmpty() contains() toString() getMatches() isEmpty() aList true