java:jfc_intf_sort

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
java:jfc_intf_sort [2015/03/23 04:44]
gthanos
java:jfc_intf_sort [2016/02/26 11:15]
127.0.0.1 external edit
Line 48: Line 48:
 Τα βασικά χαρακτηριστικά της παραπάνω κλάσης είναι τα εξής: Τα βασικά χαρακτηριστικά της παραπάνω κλάσης είναι τα εξής:
   * Έλεγχος στον κατασκευαστή εάν περνάνε ή όχι null ορίσματα. Αυτό μας προστατεύει από το να έρθουμε αντιμέτωποι με //​NullPointerException//​ στην συνέχεια.   * Έλεγχος στον κατασκευαστή εάν περνάνε ή όχι null ορίσματα. Αυτό μας προστατεύει από το να έρθουμε αντιμέτωποι με //​NullPointerException//​ στην συνέχεια.
-  * Η μέθοδος //hashCode()// επαναπροσδιορίζεται. +  * Η μέθοδος //equal()// επαναπροσδιορίζεται, έτσι ώστε να συγκρίνονται τα πεδία της κλάσης Name μεταξύ τους
-  * Η μέθοδος //equal()// επαναπροσδιορίζεται.+  * Η μέθοδος //hashCode()// επαναπροσδιορίζεται. Ο λόγος που πρέπει να επαναπροσδιορίσουμε την μέθοδο αυτή είναι ότι εξ' ορισμού δύο ίδια αντικείμενα θα πρέπει να έχουν και ίδια //​hashCodes//​. Εφόσον άλλαξε η μέθοδος //equal()// θα αλλάξει και η μέθοδος //​hashCode()//​ ώστε να επιστρέφει το ίδιο hash για αντικείμενα που η equals επιστρέφει ισότητα.
   * Υλοποιείται η μέθοδος //int comparTo(T t)//.   * Υλοποιείται η μέθοδος //int comparTo(T t)//.
 +
 +<WRAP 85% center round tip>
 +Εξ' ορισμού (εάν δεν την επαναπροσδιορίσετε) η μέθοδος [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​lang/​Object.html#​equals-java.lang.Object-|equals]],​ [[http://​docs.oracle.com/​javase/​tutorial/​java/​IandI/​objectclass.html|συγκρίνει δύο αντικείμενα με βάση την διεύθυνση του κάθε αντικειμένου]]. Στην πραγματικότητα επιστρέφει ισότητα __μόνο αν τα references των δύο αντικειμένων είναι ίδια__, δηλ. και οι δύο μεταβλητές δείχνουν στο ίδιο αντικείμενο. Στην πλειοψηφία των περιπτώσεων ο συγκεκριμένος τρόπος σύκρισης δεν μας δίνει στην πράξη ικανοποιητικό αποτελέσμα,​ καθώς αγνοεί αντικείμενα με τα ίδια περιεχόμενα.
 +
 +Σε αναλογία η μέθοδος [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​lang/​Object.html#​hashCode--|hashCode]] επιστρέφει την δεκαεξαδική τιμή που δείχνει η μεταβλητή του αντικειμένου στην μνήμη. Με δεδομένο ότι __για δύο ίδια αντικείμενα τα hashCodes τους θα πρέπει να είναι κοινά__,​ η default υλοποίηση ταιριάζει με την default υλοποίηση της μεθόδου //equals//. Αν όμως αλλάξει η υλοποίηση της //equals// σε μία κλάση θα πρέπει να αλλάξει και η //​hashCode()//​ ώστε δύο ίδια αντικείμενα κατά την μέθοδο //equals// να έχουν και ίδια hashCodes.
 +</​WRAP>​
  
 <code java NameSort.java>​ <code java NameSort.java>​
Line 70: Line 76:
 } }
 </​code>​ </​code>​
 +
 +===== Συγκρίνοντας με χρήσης ενός Comparator object =====
 +
 +Ας υποθέσουμε ότι θέλουμε να συγκρίνουμε αντικείμενα με διαφορετική μέθοδο από την μέθοδο με την οποία συγκρίνονται ή ότι θέλουμε να συγκρίνουμε αντικείμενα τα οποία δεν υλοποιούν το interface //​Comparable//​. Σε αυτή την περίπτωση θα χρειαστείουμε ένα βοηθητικό αντικείμενο του τύπου [[http://​docs.oracle.com/​javase/​7/​docs/​api/​java/​util/​Comparator.html|Comparator]],​ όπως παρακάτω
  
 <code java NameComparatorSort.java>​ <code java NameComparatorSort.java>​
Line 95: Line 105:
 } }
 </​code>​ </​code>​
 +
 +Ο συγκεκριμένος //​Comparator//​ μας δίνει την δυνατότητα να αλλάξουμε την μέθοδο με την οποία συγκρίνονται τα αντικείμενα του συγκεκριμένου τύπου δεδομένων δίνοντας προτεραιότητα στο μικρό όνομα αντί για το επίθετο.
  
java/jfc_intf_sort.txt · Last modified: 2017/05/12 12:18 by gthanos