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