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 05:06]
gthanos [Υλοποιώντας το interface Comparable για δικούς μας τύπους δεδομένων]
java:jfc_intf_sort [2016/02/26 11:15]
127.0.0.1 external edit
Line 53: Line 53:
  
 <WRAP 85% center round tip> <WRAP 85% center round tip>
-Εξ' ορισμού (εάν δεν την επαναπροσδιορίσετε) η μέθοδος [[http://​docs.oracle.com/​javase/​tutorial/​java/​IandI/​objectclass.html|equals ​συγκρίνει δύο αντικείμενα]] με βάση την διεύθυνση ​στην οποία δίχνει η μεταβλητή ​του κάθε αντικειμένου. Στην πραγματικότητα επιστρέφει ισότητα __μόνο αν τα references των δύο αντικειμένων είναι ίδια__, δηλ. και οι δύο μεταβλητές δείχνουν στο ίδιο αντικείμενο. Στην πλειοψηφία των περιπτώσεων ο συγκεκριμένος τρόπος σύκρισης δεν μας δίνει στην πράξη ικανοποιητικό αποτελέσμα.+Εξ' ορισμού (εάν δεν την επαναπροσδιορίσετε) η μέθοδος ​[[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 των δύο αντικειμένων είναι ίδια__, δηλ. και οι δύο μεταβλητές δείχνουν στο ίδιο αντικείμενο. Στην πλειοψηφία των περιπτώσεων ο συγκεκριμένος τρόπος σύκρισης δεν μας δίνει στην πράξη ικανοποιητικό αποτελέσμα, καθώς αγνοεί αντικείμενα με τα ίδια περιεχόμενα.
  
-Σε αναλογία η μέθοδος //hashCode// επιστρέφει την δεκαεξαδική τιμή που δείχνει η μεταβλητή του αντικειμένου στην μνήμη. Με δεδομένο ότι για δύο ίδια αντικείμενα τα hashCodes τους θα πρέπει να είναι κοινά, η default υλοποίηση ταιριάζει με την default υλοποίηση της μεθόδο //equal//. Αν όμως αλλάξει η //equal// θα πρέπει να αλλάξει και η //​hashCode()//​ ώστε δύο ίδια αντικείμενα κατά την //equal// να έχουν και ίδια ​hashCode.+Σε αναλογία η μέθοδος ​[[https://docs.oracle.com/javase/8/​docs/​api/​java/​lang/​Object.html#​hashCode--|hashCode]] ​επιστρέφει την δεκαεξαδική τιμή που δείχνει η μεταβλητή του αντικειμένου στην μνήμη. Με δεδομένο ότι ​__για δύο ίδια αντικείμενα τα hashCodes τους θα πρέπει να είναι κοινά__, η default υλοποίηση ταιριάζει με την default υλοποίηση της μεθόδου //equals//. Αν όμως αλλάξει η υλοποίηση της ​//equals// σε μία κλάση ​θα πρέπει να αλλάξει και η //​hashCode()//​ ώστε δύο ίδια αντικείμενα κατά την ​μέθοδο ​//equals// να έχουν και ίδια ​hashCodes.
 </​WRAP>​ </​WRAP>​
  
Line 76: 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 101: Line 105:
 } }
 </​code>​ </​code>​
 +
 +Ο συγκεκριμένος //​Comparator//​ μας δίνει την δυνατότητα να αλλάξουμε την μέθοδο με την οποία συγκρίνονται τα αντικείμενα του συγκεκριμένου τύπου δεδομένων δίνοντας προτεραιότητα στο μικρό όνομα αντί για το επίθετο.
  
java/jfc_intf_sort.txt · Last modified: 2017/05/12 12:18 by gthanos