Comparable and Comparator Nuts and Bolts. 2 Nuts and bolts Four methods underlie many of Java’s important Collection types: equals, compare and compareTo,

Slides:



Advertisements
Similar presentations
Sets and Maps Part of the Collections Framework. 2 The Set interface A Set is unordered and has no duplicates Operations are exactly those for Collection.
Advertisements

SUMMARY: abstract classes and interfaces 1 Make a class abstract so instances of it cannot be created. Make a method abstract so it must be overridden.
Problem Solving 5 Using Java API for Searching and Sorting Applications ICS-201 Introduction to Computing II Semester 071.
Lecture 27 Exam outline Boxing of primitive types in Java 1.5 Generic types in Java 1.5.
Searching. 2 Searching an array of integers If an array is not sorted, there is no better algorithm than linear search for finding an element in it static.
Searching and Sorting I 1 Searching and Sorting 1.
Unit 261 Introduction to Searching and Sorting Comparable Interface Comparator Interface Algorithm Complexity Classes Exercises.
CS 106 Introduction to Computer Science I 11 / 20 / 2006 Instructor: Michael Eckmann.
Comparable and Comparator. Outline of the Student class import java.util.*; public class Student implements Comparable { public Student(String name, int.
ICS201 Lecture 20 : Searching King Fahd University of Petroleum & Minerals College of Computer Science & Engineering Information & Computer Science Department.
Searching. 2 Searching an array of integers If an array is not sorted, there is no better algorithm than linear search for finding an element in it static.
1 Introduction to Searching and Sorting Comparable Interface -Reading p Comparator Interface.
Unit 261 Introduction to Searching and Sorting Comparable Interface Comparator Interface Algorithm Complexity Classes Exercises.
Searching. Searching an array of integers If an array is not sorted, there is no better algorithm than linear search for finding an element in it static.
Introduction to Searching and Sorting
12-Jul-15 Lists in Java Part of the Collections Framework.
Comparable and Comparator. 2 Comparing our own objects The Object class provides public boolean equals(Object obj) and public int hashCode() methods –For.
Comparing Objects in Java. The == operator When you define an object, for instance Person p = new Person("John", 23); we talk about p as if its value.
Java CourseWinter 2009/10. Introduction Object oriented, imperative programming language. Developed: Inspired by C++ programming language.
Collections. Why collections? Collections are used to hold a collection of objects. List holds objects based on order of insertion and can hold non unique.
Searching Also: Logarithms. 2 Searching an array of integers If an array is not sorted, there is no better algorithm than linear search for finding an.
Sets and Maps Part of the Collections Framework. The Set interface A Set is unordered and has no duplicates Operations are exactly those for Collection.
(c) University of Washingtonhashing-1 CSC 143 Java Hashing Set Implementation via Hashing.
1 Inheritance and Polymorphism Chapter 9. 2 Polymorphism, Dynamic Binding and Generic Programming public class Test { public static void main(String[]
CS2110: SW Development Methods Textbook readings: MSD, Chapter 8 (Sect. 8.1 and 8.2) But we won’t implement our own, so study the section on Java’s Map.
Searching Also: Logarithms. 2 Searching an array of integers If an array is not sorted, there is no better algorithm than linear search for finding an.
1 Object-Oriented Software Engineering CS Interfaces Interfaces are contracts Contracts between software groups Defines how software interacts with.
Goals for Today  implement a Deck of Cards  composition  Iterator interface  Iterable interface 1.
Inheritance. Inheritance Early programmers often wrote code very similar to existing code Example: A human resources system might handle different types.
Lecture 8: Object-Oriented Design. 8-2 MicrosoftIntroducing CS using.NETJ# in Visual Studio.NET Objectives “Good object-oriented programming is really.
Java the UML Way versjon Only to be used in connection with the book "Java the UML Way", by Else Lervik and.
Recitation 4 Abstract classes, Interfaces. A Little More Geometry! Abstract Classes Shape x ____ y ____ Triangle area() base____ height ____ Circle area()
Chapter 3 Inheritance and Polymorphism Goals: 1.Superclasses and subclasses 2.Inheritance Hierarchy 3.Polymorphism 4.Type Compatibility 5.Abstract Classes.
HashCode() 1  if you override equals() you must override hashCode()  otherwise, the hashed containers won't work properly  recall that we did not override.
Comparable and Comparator Nuts and Bolts. Sets A set is a collection in which all elements are unique—an element is either in the set, or it isn’t In.
Inheritance (Part 5) Odds and ends 1. Static Methods and Inheritance  there is a significant difference between calling a static method and calling a.
Inheritance (Part 2) KomondorBloodHound PureBreedMix Dog Object.
Chapter 5 Objects and Classes Inheritance. Solution Assignments 3 & 4 Review in class…..
1 COSC2007 Data Structures II Chapter 9 Class Relationships.
Sets and Maps Sets Maps The Comparator Interface Sets and Maps in Java Collections API – TreeSet – TreeMap Review for Exam Reading:
Chapter 8 Class Inheritance and Interfaces F Superclasses and Subclasses  Keywords: super F Overriding methods  The Object Class  Modifiers: protected,
(c) University of Washington06-1 CSC 143 Java Inheritance Tidbits.
Sets and Maps Part of the Collections Framework. 2 The Set interface A Set is unordered and has no duplicates Operations are exactly those for Collection.
CMSC 202 Containers and Iterators. Container Definition A “container” is a data structure whose purpose is to hold objects. Most languages support several.
Classes Revisited Chapter 8.
OOP Basics Classes & Methods (c) IDMS/SQL News
Reference Types CSE301 University of Sunderland Harry R Erwin, PhD.
COMP Inheritance and Polymorphism Yi Hong June 09, 2015.
Lecture 9:FXML and Useful Java Collections Michael Hsu CSULA.
Comp1004: Environments The Java Library. Coming up Recap – Encapsulation – Constructors – Loops – Arrays – ArrayList – Iterators The Java Library – Implementation.
Coming up Implementation vs. Interface The Truth about variables Comparing strings HashMaps.
Searching.
Interfaces and Inheritance
Introduction to Searching and Sorting
Comparable and Comparator Interfaces
Comparable and Comparator
Extending Classes.
Java Programming Language
Part of the Collections Framework
CSE 1030: Implementing Non-Static Features
Fall 2018 CISC124 12/3/2018 CISC124 or talk to your grader with questions about assignment grading. Fall 2018 CISC124 - Prof. McLeod Prof. Alan McLeod.
Abstract Class As per dictionary, abstraction is the quality of dealing with ideas rather than events. For example, when you consider the case of ,
Comparable and Comparator
Comparable and Comparator Interfaces
Searching.
Part of the Collections Framework
CMPE212 – Reminders Assignment 2 due next Friday.
CS 240 – Advanced Programming Concepts
Comparable and Comparator Interfaces
Presentation transcript:

Comparable and Comparator Nuts and Bolts

2 Nuts and bolts Four methods underlie many of Java’s important Collection types: equals, compare and compareTo, and hashCode To put your own objects into a Collection, you need to ensure that these methods are defined properly Any collection with some sort of membership test uses equals (which, in many cases, defaults to == ) Any collection that depends on sorting requires larger/equal/smaller comparisons ( compare or compareTo ) Any collection that depends on hashing requires both equality testing and hash codes ( equals and hashCode ) Any time you implement hashCode, you must also implement equals Some of Java’s classes, such as String, already define all of these properly for you For your own objects, you have to do it yourself

3 Comparing our own objects The Object class provides public boolean equals(Object obj) and public int hashCode() methods For objects that we define, the inherited equals and hashCode methods use the object’s address in memory We can override these methods If we override equals, we should override hashCode If we override hashCode, we must override equals The Object class does not provide any methods for “less” or “greater”—however, There is a Comparable interface in java.lang There is a Comparator interface in java.util

4 Outline of a Student class public class Student implements Comparable { public Student(String name, int score) {...} public int compareTo(Object o) throws ClassCastException {...} public static void main(String args[]) {...} }

5 Constructor for Student This is the same for both methods—nothing new here public Student(String name, int score) { this.name = name; this.score = score; } We will be sorting students according to their score This example will use sets, but that’s irrelevant— comparisons happen between two objects, whatever kind of collection they may or may not be in

6 The main method, version 1 public static void main(String args[]) { TreeSet set = new TreeSet (); set.add(new Student("Ann", 87)); set.add(new Student("Bob", 83)); set.add(new Student("Cat", 99)); set.add(new Student("Dan", 25)); set.add(new Student("Eve", 76)); Iterator iter = set.iterator(); while (iter.hasNext()) { Student s = iter.next(); System.out.println(s.name + " " + s.score); } }

7 Using the TreeSet In the main method we have the line TreeSet set = new TreeSet(); Later we use an iterator to print out the values in order, and get the following result: Dan 25 Eve 76 Bob 83 Ann 87 Cat 99 How did the iterator know that it should sort Student s by score, rather than, say, by name ?

8 Implementing Comparable public class Student implements Comparable This means it must implement the method public int compareTo(Object o) Notice that the parameter is an Object In order to implement this interface, our parameter must also be an Object, even if that’s not what we want public int compareTo(Object o) throws ClassCastException { if (o instanceof Student) return score - ((Student)o).score; else throw new ClassCastException("Not a Student!"); } A ClassCastException should be thrown if we are given a non- Student parameter

9 An improved method Since casting an arbitrary Object to a Student may throw a classCastException for us, we don’t need to throw it explicitly: public int compareTo(Object o) throws ClassCastException { return score - ((Student)o).score; } Moreover, since classCastException is a subclass of RuntimeException, we don’t even need to declare that we might throw one: public int compareTo(Object o) { return score - ((Student)o).score; }

10 Using a separate Comparator In the program we just finished, Student implemented Comparable Therefore, it had a compareTo method We could sort students only by their score If we wanted to sort students another way, such as by name, we are out of luck Now we will put the comparison method in a separate class that implements Comparator instead of Comparable This is more flexible (you can use a different Comparator to sort Students by name or by score), but it’s also clumsier Comparator is in java.util, not java.lang Comparable requires a definition of compareTo but Comparator requires a definition of compare Comparator also (sort of) requires equals

11 Outline of StudentComparator import java.util.*; public class StudentComparator implements Comparator { public int compare(Student s1, Student s2) {...} public boolean equals(Object o1) {...} } Note: When we are using this Comparator, we don’t need the compareTo method in the Student class Because of generics, our compare method can take Student arguments instead of just Object arguments

12 The compare method public int compare(Student s1, Student s2) { return s1.score – s2.score; } This differs from compareTo(Object o) in Comparable in these ways: The name is different It takes both objects as parameters, not just one We have to either use generics, or check the type of both objects If our parameters are Object s, they have to be cast to Student s

13 The someComparator.equals method Ignore this method! This method is not used to compare two Student s—it is used to compare two Comparator s Even though it’s part of the Comparator interface, you don’t actually need to override it Implementing an interface requires you to have a definition for every method in the interface--so how can this be an exception? Because you do have a definition, inherited from Object ! In fact, it’s always safe to ignore this method The purpose is efficiency—you can replace one Comparator with an equal but faster one

14 The main method The main method is just like before, except that instead of TreeSet set = new TreeSet (); We have Comparator comp = new StudentComparator(); TreeSet set = new TreeSet (comp);

15 When to use each The Comparable interface is simpler and less work Your class implements Comparable You provide a public int compareTo(Object o) method Use no argument in your TreeSet or TreeMap constructor You will use the same comparison method every time The Comparator interface is more flexible but slightly more work Create as many different classes that implement Comparator as you like You can sort the TreeSet or TreeMap differently with each Construct TreeSet or TreeMap using the comparator you want For example, sort Students by score or by name

16 Sorting differently Suppose you have students sorted by score, in a TreeSet you call studentsByScore Now you want to sort them again, this time by name Comparator myStudentNameComparator = new MyStudentNameComparator(); TreeSet studentsByName = new TreeSet(myStudentNameComparator); studentsByName.addAll(studentsByScore);

17 The End Eclipse Hints ● To see more than one class at a time (on a split screen), grab a tab with the mouse and drag it to near one of the other edges (side or bottom).