This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
|
java:inner_classes [2017/02/06 13:13] gthanos |
java:inner_classes [2019/04/02 20:20] gthanos |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Μη στατικές εμφωλευμένες κλάσεις ====== | ====== Μη στατικές εμφωλευμένες κλάσεις ====== | ||
| - | Οι μη στατικές εμφωλευμένες κλάσεις ή εσωτερικές κλάσεις (inner classes) αποτελούν την γενικότερη περίπτωση εμφώλευσης μίας κλάσης μέσα σε μία άλλη κλάση. | + | Οι μη στατικές εμφωλευμένες κλάσεις ή εσωτερικές κλάσεις (inner classes) αποτελούν την γενικότερη περίπτωση εμφώλευσης μίας κλάσης μέσα σε μία άλλη κλάση. |
| + | Η λίστα θα χρειαστεί | ||
| + | - την κλάση που περιγράφει τον κόμβο της λίστας και | ||
| + | - μία κλάση τύπου // | ||
| + | Οι δύο παραπάνω κλάσεις εξυπηρετεί να δηλωθούν ως εσωτερικές κλάσεις αποκρύπτοντας την | ||
| - | <code java DataStructure.java> | + | <code java LinkedList.java> |
| - | public class DataStructure | + | public class LinkedList< |
| + | private Node< | ||
| | | ||
| - | | + | |
| - | | + | |
| - | | + | |
| + | head.setNext(tail); | ||
| + | } | ||
| | | ||
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| + | public Node(Node<E> nxt, Node< | ||
| + | | ||
| + | prev = prv; | ||
| + | e = elem; | ||
| } | } | ||
| + | | ||
| + | public Node< | ||
| + | public void setNext(Node< | ||
| + | public Node< | ||
| + | public void setPrev(Node< | ||
| + | public E getElement() { return e; } | ||
| + | public void setElement(E elem) { e = elem; } | ||
| } | } | ||
| | | ||
| - | public | + | |
| - | + | Node< | |
| - | | + | |
| - | | + | curr = c; |
| - | | + | |
| - | | + | |
| + | if(curr.getNext() != tail) | ||
| + | return true; | ||
| + | return false; | ||
| + | | ||
| + | public E next() { | ||
| + | curr = curr.getNext(); | ||
| + | return curr.getElement(); | ||
| + | | ||
| + | public void remove() { | ||
| + | curr.getPrev().setNext(curr.getNext()); | ||
| + | | ||
| + | curr = null; | ||
| } | } | ||
| - | System.out.println(); | ||
| } | } | ||
| | | ||
| - | | + | Iterator< |
| - | + | | |
| - | // Inner class implements the DataStructureIterator interface, | + | } |
| - | // which extends the Iterator< | + | |
| | | ||
| - | | + | // append in the end |
| - | + | public void add(E elem) { | |
| - | | + | |
| - | | + | |
| - | + | | |
| - | public boolean | + | } |
| - | + | ||
| - | // Check if the current element is the last in the array | + | |
| - | return (nextIndex | + | |
| - | | + | |
| - | + | | |
| - | public Integer next() { | + | |
| - | | + | return |
| - | // Record a value of an even index of the array | + | |
| - | Integer retValue | + | |
| - | + | ||
| - | // Get the next even element | + | |
| - | nextIndex += 2; | + | |
| - | | + | |
| } | } | ||
| - | | + | |
| - | public void remove() { } | + | |
| } | } | ||
| | | ||
| - | public static void main(String | + | |
| - | + | Iterator< | |
| - | | + | int index = -1; |
| - | | + | while(it.hasNext()) { |
| - | | + | E e = it.next(); |
| - | | + | index++; |
| + | if( e.equals(elem) ) | ||
| + | return index; | ||
| + | } | ||
| + | return -1; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Το παρακάτω πρόγραμμα επιχειρεί να δημιουργήσει μία λίστα με 20 τυχαίους αριθμούς και στη συνέχεια να τους εκτυπώσει χρησιμοποιώντας τον Iterator της λίστας. Παρατηρήστε ότι σε κανένα σημείου του προγράμματος δεν αποκαλύπτεται η ύπαρξη των εσωτερικών κλάσεων //Node// και // | ||
| + | |||
| + | <code java LinkedListUsage.java> | ||
| + | import java.util.*; | ||
| + | |||
| + | public class LinkedListUsage { | ||
| + | public static final int SIZE = 20; | ||
| + | |||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | list.add(rand.nextInt(8*SIZE)); | ||
| + | | ||
| + | Iterator< | ||
| + | | ||
| + | System.out.print(it.next()+" | ||
| + | } | ||
| + | System.out.println(); | ||
| } | } | ||
| } | } | ||
| </ | </ | ||
| - | <WRAP todo center 80% round> | + | <WRAP todo center 80% round> |
| </ | </ | ||
| - | |Προηγούμενο: | + | |Προηγούμενο: |