college/Summer-2024/CS-3443/Slides/txt/28_Java Comparison.txt

396 lines
8.6 KiB
Plaintext
Raw Permalink Normal View History

2024-08-31 02:13:09 -05:00
Application
Programming
Hend Alkittawi
Java Comparison
Comparing objects in Java
Collections
INTRODUCTION
-
Related to the discussion on Java generics and collections is the
discussion on the following interfaces
-
-
Iterator, Iterable, Comparable, Comparator
The Java API has a consistent approach to iterators that are
implemented by nearly all collections in the class Library.
-
Iterators are implemented in the Java API using two primary interfaces:
-
Iterator: used to define an object that can be used as an iterator.
-
Iterable: used to define a collection from which an iterator can be
extracted.
-
The Comparable and Comparator interfaces in Java facilitate comparisons
between objects
COMPARING OBJECTS
-
Classes that implement the Comparable and Comparator
interfaces must contain certain key methods for comparing
objects created by that class
-
For example, the String class implements Comparable, so
sorting Strings in an array alphabetically is easy
String[] fruits = new String[] {"Pineapple", "Apple", "Orange", "Banana"};
Arrays.sort(fruits);
THE COMPARABLE INTERFACE
-
The Comparable interface contains only one method: compareTo()
which takes an object as a parameter and returns an integer
-
The purpose of this interface is to provide a common mechanism for
comparing one object to another
ClassName obj1 = new ClassName();
ClassName obj2 = new ClassName();
int result
= obj1.compareTo(obj2);
-
The integer that is returned from the compareTo() method should be
-
negative if obj1 < obj2
-
positive
if obj1 > obj2
-
zero
if obj1 = obj2
THE COMPARABLE INTERFACE
-
If an object is Comparable, we can sort an array of it
Book book1 = new Book(...);
Book book2 = new Book(...);
-
For an array of Comparable objects, use
Arrays.sort()
The Arrays class provides the sorting logic for Comparable types
-
Arrays.sort()takes an array of objects which implement the
Comparable interface
Book[] books = new Book[2];
books[0] = book1;
books[1] = book2;
Arrays.sort( books );
// Comparable
THE COMPARABLE INTERFACE
-
If an object is Comparable, we can sort a collection of it
Book book1 = new Book(...);
Book book2 = new Book(...);
-
For an arraylist of Comparable objects use the sort() method
from Collections
ArrayList<Book> bookList = new ArrayList<Book>();
bookList.add( book1 );
bookList.add( book2 );
Collections.sort( bookList );
// some code is omitted, check code for
project in Canvas
public class ComparableTest {
public static void main(String[] args) {
Book book1 = new Book("Java The Complete Guide", "Pat Alfonso");
Book book2 = new Book("Java for Begginers",
"Hamza Ryan");
Book book3 = new Book("Java for Begginers",
"Daisy Mack");
Book book4 = new Book("Java All in One",
"Carolina Minato");
Book book5 = new Book("Java All in One",
"Carolina Aidan");
public class Book implements Comparable<Book> {
private String title;
private String author;
public Book(String title, String author) {
this.title = title;
this.author = author;
}
ArrayList<Book> bookArrayList = new ArrayList<Book>();
bookArrayList.addAll(Arrays.asList(book1, book2, book3, book4, book5));
System.out.println("******* Unsorted Collection *******");
System.out.println(bookArrayList);
@Override
public String toString() {
return "Book [title=" + title + ", author="
+ author + "]";
}
@Override
public int compareTo(Book other) {
return
this.getAuthor().compareTo(
Collections.sort(bookArrayList);
System.out.println("******* Sorted Collection *******");
System.out.println(bookArrayList);
Book[] bookArray = {book1, book2, book3, book4, book5};
System.out.println("******* Unsorted Array *******");
for(Book book : bookArray)
System.out.println(book);
other.getAuthor());
}
}
Arrays.sort(bookArray);
System.out.println("******* Sorted Array *******");
for(Book book : bookArray)
System.out.println(book);
}
}
THE COMPARATOR INTERFACE
-
The Comparator interface contains the compare() method which takes two
objects as a parameter and returns an integer
-
If an object is Comparator, we can sort an array of it
Book book1 = new Book(...);
Book book2 = new Book(...);
-
For an array of Comparable objects, use
Arrays.sort()
The Arrays class provides the sorting logic for Comparable types
-
Arrays.sort()takes an array of objects which implement the Comparable
interface
Book[] books = new Book[2];
books[0] = book1;
books[1] = book2;
Arrays.sort( books );
// Comparable
Arrays.sort( books, Book.bookComparator ); // Comparator
THE COMPARATOR INTERFACE
-
For an arrayList, you can use the use the sort() method from ArrayList
bookList.sort( Book.bookComparator );
where BookComparator is defined in the Book class as follows
public static Comparator<Book> bookComparator
= new Comparator<Book>() {
public int compare(Book book1, Book book2) {
return book1.getTitle().compareTo(book2.getTitle());
}
};
// public static Comparator<Book> bookComparator = new Comparator<Book>();
-
Inner classes are classes defined within another class.
-
An anonymous inner class is a class without a name, for which only one object is
created.
Implementing The Comparator Interface
public static MyComparator bookComparator;
public class MyComparator implements Comparator<Book>{
@Override
public int compare(Book book1, Book book2){
return book1.getAuthor().compareTo(book2.getAuthor());
}
}
private String title;
private String author;
// some code is omitted, check code for project in Canvas
// some code is omitted, check code
for project in Canvas
public class Book {
public class ComparatorTest {
public Book(String title, String author){
this.title = title;
this.author = author;
bookComparator = new MyComparator();
}
public static void main(String[] args){
Book book1 = new Book("Java The Complete Guide", "Pat Alfonso");
Book book2 = new Book("Java for Begginers",
"Hamza Ryan");
Book book3 = new Book("Java for Begginers",
"Daisy Mack");
Book book4 = new Book("Java All in One",
"Carolina Minato");
Book book5 = new Book("Java All in One",
"Carolina Aidan");
@Override
public String toString() {
return "Book [title=" + title + ",
author=" + author + "]";
}
ArrayList<Book> bookArrayList = new ArrayList<Book>();
bookArrayList.addAll(Arrays.asList(book1, book2, book3, book4, book5));
Collections.sort(bookArrayList, Book.bookComparator);
}
// OR
bookArrayList.sort(Book.bookComparator);
}
Implementing The Comparator Interface As An Inner Class
// some code is omitted, check code for project
in Canvas
// some code is omitted, check code for project in Canvas
public class ComparatorTest {
public class Book {
public static MyComparator bookComparator;
private String title;
private String author;
public static void main(String[] args){
Book book1 = new Book("Java The Complete Guide", "Pat Alfonso");
Book book2 = new Book("Java for Begginers",
"Hamza Ryan");
Book book3 = new Book("Java for Begginers",
"Daisy Mack");
Book book4 = new Book("Java All in One",
"Carolina Minato");
Book book5 = new Book("Java All in One",
"Carolina Aidan");
public Book(String title, String author) {
this.title = title;
this.author = author;
bookComparator = new MyComparator();
}
@Override
public String toString() {
return "Book [title=" + title
+ ", author=" + author + "]";
}
private class MyComparator implements Comparator<Book> {
@Override
public int compare(Book book1, Book book2) {
return book1.getAuthor().
compareTo(book2.getAuthor());
}
}
}
ArrayList<Book> bookArrayList = new ArrayList<Book>();
bookArrayList.addAll(Arrays.asList(book1, book2, book3, book4, book5));
Collections.sort(bookArrayList, Book.bookComparator);
// OR
bookArrayList.sort(Book.bookComparator);
}
Implementing The Comparator Interface As An Anonymous
Inner Class
// some code is omitted, check code for project
in Canvas
public class Book {
public static MyComparator bookComparator;
private String title;
private String author;
public Book(String title, String author) {
this.title = title;
this.author = author;
bookComparator = new MyComparator();
}
@Override
public String toString() {
return "Book [title=" + title
+ ", author=" + author + "]";
}
private class MyComparator implements Comparator<Book> {
@Override
public int compare(Book book1, Book book2) {
return book1.getAuthor().
compareTo(book2.getAuthor());
}
}
}
// some code is omitted, check code for project in Canvas
public class Book {
public static Comparator<Book> bookComparator = new Comparator<Book>() {
public int compare(Book book1, Book book2) {
return book1.getAuthor().compareTo(book2.getAuthor());
}
};
private String title;
private String author;
public Book(String title, String author) {
this.title = title;
this.author = author;
}
}
DO YOU HAVE ANY
QUESTIONS?
THANK
YOU!
@
hend.alkittawi@utsa.edu
By Appointment
Online