java:jfc_intf_sort
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| java:jfc_intf_sort [2020/03/10 15:35] – [Συγκρίνοντας με χρήσης ενός Comparator object] gthanos | java:jfc_intf_sort [Unknown date] (current) – external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== | + | ====== |
| - | Κατά κανόνα όταν θέλουμε να συγκρίνουμε επιμέρους αντικείμενα προκειμένου να ορίσουμε την σειρά αποθήκευσης και ανάκτησης τους σε μία δομή δεδομένων αυτό θα πρέπει να ακολουθεί κάποιους κανόνες. Για παράδειγμα, | + | ===== Ανίχνευση ισότητας αντικειμένων |
| - | {{ :java:object-ordering.png? | + | Εάν θέλουμε να αποθηκεύσουμε σε ένα //hash table// μία σειρά αντικειμένων θα πρέπει να είμαστε σίγουροι ότι δεν θα προστεθούν σε αυτό δύο ίδια αντικείμενα. Κατά συνέπεια, |
| + | |||
| + | Προκειμένου να μπορούμε να ανιχνεύουμε την ισότητα μεταξύ αντικειμένων η Java παρέχει τις μεθόδους [[https:// | ||
| + | |||
| + | ==== Υλοποιώντας την ισότητα αντικειμένων τύπου Student ==== | ||
| - | ===== Υλοποιώντας το interface Comparable για δικούς | + | Παρακάτω δίνεται |
| - | Παρακάτω δίνεται η υλοποίηση του interface // | ||
| <code java Student.java> | <code java Student.java> | ||
| - | public class Student | + | public class Student { |
| private String firstName; | private String firstName; | ||
| private String lastName; | private String lastName; | ||
| Line 16: | Line 19: | ||
| firstName = fname; | firstName = fname; | ||
| lastName = lname; | lastName = lname; | ||
| + | } | ||
| + | | ||
| + | public void setFirstName( String firstName ) { | ||
| + | this.firstName = firstName; | ||
| + | } | ||
| + | | ||
| + | public void setLastName( String lastName ) { | ||
| + | this.lastName = lastName; | ||
| + | } | ||
| + | | ||
| + | public String getFirstName() { | ||
| + | return firstName; | ||
| + | } | ||
| + | | ||
| + | public String getLastName() { | ||
| + | return lastName; | ||
| } | } | ||
| Line 23: | Line 42: | ||
| | | ||
| public boolean equals(Object o) { | public boolean equals(Object o) { | ||
| + | if(o == null) | ||
| + | return false; | ||
| return (o instanceof Student && o.hashCode() == this.hashCode()); | return (o instanceof Student && o.hashCode() == this.hashCode()); | ||
| } | } | ||
| Line 28: | Line 49: | ||
| public int hashCode() { | public int hashCode() { | ||
| return 3 * firstName.hashCode() + 5 * lastName.hashCode(); | return 3 * firstName.hashCode() + 5 * lastName.hashCode(); | ||
| - | } | ||
| - | | ||
| - | public int compareTo(Student st) { | ||
| - | return lastName.compareTo(st.lastName) != 0 ? lastName.compareTo(st.lastName) : firstName.compareTo(st.firstName); | ||
| } | } | ||
| } | } | ||
| </ | </ | ||
| + | Παρατηρήστε ότι η μέθοδος equals επιστρέφει true εάν η παράμετρος '' | ||
| - | < | + | Η μέθοδος hashCode πρέπει να επιστρέφει την ίδια ακέραια τιμή για δύο ίσα αντικείμενα. Για το συγκεκριμένο παράδειγμα είναι αναγκαίο να έχουμε υπόψη μας ότι η κλάση [[https:// |
| - | import | + | |
| - | public class StudentsSort { | + | ===== Σύγκριση αντικειμένων ===== |
| - | public static void main(String[] args) { | + | |
| - | List< | + | |
| - | list.add(new Student(" | + | |
| - | list.add(new Student(" | + | |
| - | list.add(new Student(" | + | |
| - | list.add(new Student(" | + | |
| - | Collections.sort(list); | + | Εάν θέλουμε να αποθηκεύσουμε αντικείμενα σε μία δεντρική δομή λεξικού (π.χ. [[https:// |
| - | | + | |
| + | Η διαδικασία της σύγκρισης επιτυγχάνεται υλοποιώντας το // | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | ==== Υλοποιώντας το interface Comparable για δικούς μας τύπους δεδομένων ==== | ||
| + | |||
| + | Παρακάτω δίνεται η υλοποίηση του interface [[https:// | ||
| + | |||
| + | <code java Student.java> | ||
| + | public class Student implements java.lang.Comparable< | ||
| + | private String firstName; | ||
| + | private String lastName; | ||
| + | |||
| + | public Student(String fname, String lname) { | ||
| + | | ||
| + | lastName = lname; | ||
| + | } | ||
| + | |||
| + | public void setFirstName( String firstName ) { | ||
| + | this.firstName = firstName; | ||
| + | } | ||
| + | |||
| + | public void setLastName( String lastName ) { | ||
| + | this.lastName = lastName; | ||
| + | } | ||
| + | |||
| + | public String getFirstName() { | ||
| + | return firstName; | ||
| + | } | ||
| + | |||
| + | public String getLastName() { | ||
| + | return lastName; | ||
| + | } | ||
| + | |||
| + | public String toString() { | ||
| + | return firstName+" | ||
| + | } | ||
| + | |||
| + | public boolean equals(Object o) { | ||
| + | return (o instanceof Student && o.hashCode() == this.hashCode()); | ||
| + | } | ||
| + | |||
| + | public int hashCode() { | ||
| + | return 3 * firstName.hashCode() + 5 * lastName.hashCode(); | ||
| + | } | ||
| + | |||
| + | public int compareTo(Student st) { | ||
| + | return lastName.compareTo(st.lastName) != 0 ? lastName.compareTo(st.lastName) : firstName.compareTo(st.firstName); | ||
| } | } | ||
| } | } | ||
| Line 56: | Line 115: | ||
| ===== Συγκρίνοντας με χρήση ενός Comparator object ===== | ===== Συγκρίνοντας με χρήση ενός Comparator object ===== | ||
| - | Ας υποθέσουμε ότι θέλουμε να συγκρίνουμε αντικείμενα με διαφορετική | + | [[: |
| <code java StudentComparator.java> | <code java StudentComparator.java> | ||
| Line 67: | Line 126: | ||
| </ | </ | ||
| - | <code java> | + | |Προηγούμενο: |
| - | public static void main(String[] args) { | + | |
| - | Name nameArray[] = { | + | |
| - | new Name(" | + | |
| - | new Name(" | + | |
| - | new Name(" | + | |
| - | new Name(" | + | |
| - | }; | + | |
| - | Collections.sort(Arrays.asList(nameArray), | + | |
| - | for(Name n: nameArray) | + | |
| - | System.out.println(n); | + | |
| - | } | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | Ο συγκεκριμένος // | + | |
| - | + | ||
| - | |Προηγούμενο: | + | |
java/jfc_intf_sort.1583854500.txt.gz · Last modified: 2020/03/10 15:35 by gthanos
