| Both sides previous revision
Previous revision
Next revision
|
Previous revision
Next revision
Both sides next revision
|
java:comparable [2020/02/25 08:17] gthanos |
java:comparable [2020/02/26 20:44] gthanos [Το interface java.util.Comparator] |
| |
| <WRAP tip 80% center round> | <WRAP tip 80% center round> |
| Οι βασικές κλάσεις του πακέτου java.lang (String,Character,Long,Integer,Short,Double,Float) υλοποιούν το interface [[https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html|java.lang.Comparable]]. Η κλάση [[[[https://docs.oracle.com/javase/8/docs/api/java/lang/String.html|java.lang.String]] υλοποιεί σύγκριση δύο Strings λεξικογραφικά. | Οι βασικές κλάσεις του πακέτου java.lang (String,Character,Long,Integer,Short,Double,Float) υλοποιούν το interface [[https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html|java.lang.Comparable]]. Η κλάση [[https://docs.oracle.com/javase/8/docs/api/java/lang/String.html|java.lang.String]] υλοποιεί σύγκριση δύο Strings λεξικογραφικά. |
| </WRAP> | </WRAP> |
| |
| ===== Το interface java.util.Comparator ===== | ===== Το interface java.util.Comparator ===== |
| |
| Στο προηγούμενο παράδειγμα, ας υποθέσουμε ότι ενώ η κλάση Rectangle υλοποιεί το interface Comparable εμείς δεν θέλουμε να κατατάξουμε τα αντικείμενα με βάση το κριτήριο σύγκρισης που εισάγει η μέθοδος compareTo, αλλά θέλουμε να τα κατατάξουμε με βάση το πλάτος και εάν τα πλάτη είναι ίδια με βάση το ύψος. Σε αυτή την περίπτωση μπορούμε να εκμεταλλευτούμε μια παραλλαγή της μεθόδου sort, η οποία εκτός από τον πίνακα λαμβάνει ως δεύτερο όρισμα μία κλάση που θα επιτελέσει τη σύγκριση δύο αντικειμένων μεταξύ τους. Η κλάση αυτή πρέπει υποχρεωτικά να υλοποιεί το interface [[https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html|java.util.Comparator]]. | Στο προηγούμενο παράδειγμα, ας υποθέσουμε ότι ενώ η κλάση Rectangle υλοποιεί το interface Comparable εμείς δεν θέλουμε να κατατάξουμε τα αντικείμενα με βάση το κριτήριο σύγκρισης που εισάγει η μέθοδος compareTo (το εμβαδό του παραλληλογράμμου), αλλά με βάση το ύψος. Σε αυτή την περίπτωση μπορούμε να εκμεταλλευτούμε μια παραλλαγή της μεθόδου sort, η οποία εκτός από τον πίνακα λαμβάνει ως δεύτερο όρισμα μία κλάση που θα επιτελέσει τη σύγκριση δύο αντικειμένων μεταξύ τους. Η κλάση αυτή πρέπει υποχρεωτικά να υλοποιεί το interface [[https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html|java.util.Comparator]]. Για το προηγούμενο παράδειγμα ας δημιουργήσουμε μία τέτοια κλάση. |
| |
| | <code java RectangleComparator.java> |
| | public class RectangleComparator implements java.util.Comparator<Rectangle>{ |
| | |
| | public int compare(Rectangle r1, Rectangle r2) { |
| | return r1.height - r2.height; |
| | } |
| | } |
| | </code> |
| | |
| | και στη μέθοδο main να καλέσουμε την παραλλαγή της sort ως εξης: |
| | <code java> |
| | Arrays.sort(rectangles, new RectangleComparator()); |
| | </code> |
| | |
| | Παρατηρείτε ότι η σειρά της τελικής κατάταξης των αντικειμένων αλλάζει. Αγνοείται η σειρά κατάταξης που δημιουργεί η μέθοδος ''compareTo'' και εισάγεται η σειρά κατάταξης που ορίζει η παραπάνω κλάση. |
| | |
| | <WRAP tip 80% center round> |
| | Ο παραπάνω τρόπος σύγκρισης έχει ιδιαίτερη χρησιμότητα όταν έχουμε κλάσεις των οποίων θέλουμε να συγκρίνουμε τα αντικείμενα μεταξύ τους, αλλά οι κλάσεις αυτές δεν υλοποιούν το interface java.lang.Comparable. |
| | </WRAP> |
| | |
| | | Προηγούμενο : [[ :java:abstract_classes_vs_interfaces | Σύγκριση abstract κλάσεων και interfaces ]] | [[ :toc | Περιεχόμενα ]] | Επόμενο: [[ :java:instanceof | Ο τελεστής instanceof ]] | |