C7: Overriding equals and hashCode
CPSC 210
๐ย ๐ย ๐ฆย ๐ย ๐ย ๐ฆย ๐ธ ๐ฆ๐ณย ๐ธย ๐ย ๐ฅย ๐ย ๐ฅ๐ฟ
Learning Goals
- Understand why we sometimes need to override equals and hashCode
- Learn how to override equals/hashCode (or use the IDE to help us)
Handling Duplicate Objects
- At the top of every class hierarchy is the Object class
-
Among others, this class defines the following methods
- boolean equals(Object other)
- int hashCode()โ
- โThese are used by the containsย methods in Java collectionsโ
List<Instructor> instructors = new ArrayList<>();
instructors.add(new Instructor("Felix"));
Instructor instructor = new Instructor("Felix");
instructors.contains(instructor);
Handling Duplicate Objects (2)
-
What we need to know about in this course:
- โObject class implements a.equals(b) as a == b
- Method can be overridden to change this behavior
- When we override equals we should also override hashCode
- if a.equals(b), then a.hashCode()ย must equal b.hashCode()
-
โWe can let IntelliJ help us generate these methods:
- Code > Generate > equals() and hashCode()
Let's ask the docs!
Lecture Ticket Review
Live Coding!!!
public class RecipeBook {
private String name;
private Map<String, List<String>> recipes;
public RecipeBook(String name){
this.name = name;
this.recipes = new HashMap<>();
}
// REQUIRES: recipeName is not already in recipes
// MODIFIES: this
// EFFECTS: adds recipeName to recipes, and assigns an empty list of ingredients
public void addNewRecipe(String recipeName){
List<String> ingredients = new ArrayList<>();
//BLANK 1
}
// REQUIRES: recipeName is in recipes
// MODIFIES: this
// EFFECTS: adds ingredient to recipeName's list of ingredients
public void addToRecipe(String recipeName, String ingredient){
List<String> ingredients = recipes.get(recipeName);
//BLANK 2
}
public void printRecipes(){
System.out.println(this.recipes);
}
}
Lecture Lab
C7: Overriding equals and hashCode
The End - Thank You!
C7: Overriding equals and hashCode
By Steven Wolfman
C7: Overriding equals and hashCode
- 9