java:inner_classes

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
Next revision Both sides next revision
java:inner_classes [2018/03/21 07:42]
gthanos
java:inner_classes [2019/04/02 20:38]
gthanos
Line 8: Line 8:
  
 <code java LinkedList.java> <code java LinkedList.java>
 +
 +/* A linked list with sentinels at head and tail.
 + */
 public class LinkedList<E> { public class LinkedList<E> {
   private Node<E> head, tail;   private Node<E> head, tail;
Line 27: Line 30:
     }     }
          
-    public Node<E> getNext() {return next;}+    public Node<E> getNext() { return next;}
     public void setNext(Node<E> nxt) { next = nxt; }     public void setNext(Node<E> nxt) { next = nxt; }
     public Node<E> getPrev() {return prev;}     public Node<E> getPrev() {return prev;}
Line 35: Line 38:
   }   }
      
-  private class Iterator<E> implements java.util.Iterator {+  private class Iterator<E> implements java.util.Iterator<E> {
     Node<E> curr;     Node<E> curr;
 +    
     public Iterator(Node<E> c) {     public Iterator(Node<E> c) {
       curr = c;       curr = c;
Line 52: Line 56:
       curr.getPrev().setNext(curr.getNext());       curr.getPrev().setNext(curr.getNext());
       curr.getNext().setPrev(curr.getPrev());       curr.getNext().setPrev(curr.getPrev());
-      curr = null;+      curr = curr.getPrev();
     }     }
   }   }
Line 92: Line 96:
  
 Το παρακάτω πρόγραμμα επιχειρεί να δημιουργήσει μία λίστα με 20 τυχαίους αριθμούς και στη συνέχεια να τους εκτυπώσει χρησιμοποιώντας τον Iterator της λίστας. Παρατηρήστε ότι σε κανένα σημείου του προγράμματος δεν αποκαλύπτεται η ύπαρξη των εσωτερικών κλάσεων //Node// και //Iterator//. Η μεταβλητή //it// παραπέμπει στο interface [[http://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html|java.util.Iterator]]. Το παρακάτω πρόγραμμα επιχειρεί να δημιουργήσει μία λίστα με 20 τυχαίους αριθμούς και στη συνέχεια να τους εκτυπώσει χρησιμοποιώντας τον Iterator της λίστας. Παρατηρήστε ότι σε κανένα σημείου του προγράμματος δεν αποκαλύπτεται η ύπαρξη των εσωτερικών κλάσεων //Node// και //Iterator//. Η μεταβλητή //it// παραπέμπει στο interface [[http://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html|java.util.Iterator]].
 +
 +<code java LinkedListUsage.java>
 +import java.util.*;
 +
 +public class LinkedListUsage {
 +  public static final int SIZE = 16;
 +  public static final int RANGE = 8 * SIZE;
 +  
 +  public static void main(String[] args) {
 +    Random rand = new Random( new Date().getTime());
 +    LinkedList<Integer> list = new LinkedList<>();
 +    for(int i=0; i<SIZE; i++) {
 +      list.add(rand.nextInt(RANGE));
 +    }
 +    Iterator<Integer> it = list.iterator();
 +    
 +    // Print list
 +    while(it.hasNext()) {
 +      System.out.print(it.next()+"  ");
 +    }
 +    System.out.println();
 +    
 +    // Remove all elements less than RANGE/2
 +    System.out.println("Remove values < "+RANGE/2);
 +    it = list.iterator();
 +    while(it.hasNext()) {
 +      int value = it.next();
 +      //System.out.println("value: "+value);
 +      if(value < RANGE/2) {
 +        //System.out.println("RMV: "+value);
 +        it.remove();
 +      }
 +    }
 +    
 +    // Print list
 +    it = list.iterator();
 +    while(it.hasNext()) {
 +      System.out.print(it.next()+"  ");
 +    }
 +    System.out.println();
 +  }
 +}
 +
 +</code>
  
 <WRAP todo center 80% round> **Εργασία για το σπίτι:** Επιχειρήσετε να συμπληρώσετε την κλάση LinkedList ώστε να ικανοποιεί το interface [[http://docs.oracle.com/javase/8/docs/api/java/util/List.html|java.util.List]]. <WRAP todo center 80% round> **Εργασία για το σπίτι:** Επιχειρήσετε να συμπληρώσετε την κλάση LinkedList ώστε να ικανοποιεί το interface [[http://docs.oracle.com/javase/8/docs/api/java/util/List.html|java.util.List]].
java/inner_classes.txt · Last modified: 2021/04/12 04:31 (external edit)