Implement AB6, Aufgabe 1+2
This commit is contained in:
		@@ -1,13 +1,13 @@
 | 
				
			|||||||
import org.junit.jupiter.api.Test;
 | 
					import org.junit.jupiter.api.Test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.HashSet;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static org.junit.jupiter.api.Assertions.*;
 | 
					import static org.junit.jupiter.api.Assertions.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class Aufgabe6Test {
 | 
					public class Aufgabe6Test {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testEP2() {
 | 
					    public void testEP2() {
 | 
				
			||||||
 | 
					 | 
				
			||||||
        /* //TODO: uncomment for testing
 | 
					 | 
				
			||||||
        NamedBody sun1, mercury1, venus1, earth1, moon1, mars1, deimos1, phobos1, vesta1, pallas1, hygiea1, ceres1;
 | 
					        NamedBody sun1, mercury1, venus1, earth1, moon1, mars1, deimos1, phobos1, vesta1, pallas1, hygiea1, ceres1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // create the same 12 named body-force pairs
 | 
					        // create the same 12 named body-force pairs
 | 
				
			||||||
@@ -70,7 +70,7 @@ public class Aufgabe6Test {
 | 
				
			|||||||
            set2.add(m);
 | 
					            set2.add(m);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertTrue(set1.equals(set2));
 | 
					        assertEquals(set1, set2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        MassiveLinkedList list = map.getKeys().toList();
 | 
					        MassiveLinkedList list = map.getKeys().toList();
 | 
				
			||||||
        while (list.size() > 0) {
 | 
					        while (list.size() > 0) {
 | 
				
			||||||
@@ -112,7 +112,5 @@ public class Aufgabe6Test {
 | 
				
			|||||||
            count++;
 | 
					            count++;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        assertEquals(12, count);
 | 
					        assertEquals(12, count);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        */ //TODO: uncomment
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -103,10 +103,10 @@ public class BodyForceTreeMap {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public String toString() {
 | 
					    public String toString() {
 | 
				
			||||||
        return toString(root);
 | 
					        return (root != null) ? toString(root) : "";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private class Item {
 | 
					    private static class Item {
 | 
				
			||||||
        private final Body key;
 | 
					        private final Body key;
 | 
				
			||||||
        private Vector3 value;
 | 
					        private Vector3 value;
 | 
				
			||||||
        private Item parent;
 | 
					        private Item parent;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -222,7 +222,7 @@ public class BodyLinkedList implements Iterable<Body> {
 | 
				
			|||||||
        };
 | 
					        };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private class Item {
 | 
					    private static class Item {
 | 
				
			||||||
        private final Body body;
 | 
					        private final Body body;
 | 
				
			||||||
        private Item prev;
 | 
					        private Item prev;
 | 
				
			||||||
        private Item next;
 | 
					        private Item next;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ import codedraw.CodeDraw;
 | 
				
			|||||||
 * and an arbitrary number of subsystems (of type 'CosmicSystem') in its orbit.
 | 
					 * and an arbitrary number of subsystems (of type 'CosmicSystem') in its orbit.
 | 
				
			||||||
 * This class implements 'CosmicSystem'.
 | 
					 * This class implements 'CosmicSystem'.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class HierarchicalSystem implements CosmicSystem {
 | 
					public class HierarchicalSystem implements CosmicSystem, MassiveIterable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final NamedBodyForcePair central;
 | 
					    private final NamedBodyForcePair central;
 | 
				
			||||||
    private CosmicSystem[] orbit;
 | 
					    private CosmicSystem[] orbit;
 | 
				
			||||||
@@ -127,4 +127,53 @@ public class HierarchicalSystem implements CosmicSystem {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public MassiveIterator iterator() {
 | 
				
			||||||
 | 
					        return new MassiveIterator() {
 | 
				
			||||||
 | 
					            private int i = 0;
 | 
				
			||||||
 | 
					            private MassiveIterator cur = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public Massive next() {
 | 
				
			||||||
 | 
					                if (cur != null && cur.hasNext()) return cur.next();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for (; i < all.length; i++) {
 | 
				
			||||||
 | 
					                    CosmicSystem sys = all[i];
 | 
				
			||||||
 | 
					                    if (sys instanceof NamedBodyForcePair m) {
 | 
				
			||||||
 | 
					                        i++;
 | 
				
			||||||
 | 
					                        return m.getBody();
 | 
				
			||||||
 | 
					                    } else if (sys instanceof HierarchicalSystem hs) {
 | 
				
			||||||
 | 
					                        cur = hs.iterator();
 | 
				
			||||||
 | 
					                        if (cur.hasNext()) {
 | 
				
			||||||
 | 
					                            i++;
 | 
				
			||||||
 | 
					                            return cur.next();
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                return null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public boolean hasNext() {
 | 
				
			||||||
 | 
					                if (cur != null && cur.hasNext()) return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for (; i < all.length; i++) {
 | 
				
			||||||
 | 
					                    CosmicSystem sys = all[i];
 | 
				
			||||||
 | 
					                    if (sys instanceof NamedBodyForcePair) {
 | 
				
			||||||
 | 
					                        return true;
 | 
				
			||||||
 | 
					                    } else if (sys instanceof HierarchicalSystem hs) {
 | 
				
			||||||
 | 
					                        cur = hs.iterator();
 | 
				
			||||||
 | 
					                        if (cur.hasNext()) {
 | 
				
			||||||
 | 
					                            i++;
 | 
				
			||||||
 | 
					                            return true;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                return false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
 | 
					import codedraw.CodeDraw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * A map that associates an object of 'Massive' with a Vector3. The number of key-value pairs
 | 
					 * A map that associates an object of 'Massive' with a Vector3. The number of key-value pairs
 | 
				
			||||||
 * is not limited.
 | 
					 * is not limited.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
// TODO: define further classes and methods for the binary search tree and the implementation
 | 
					public class MassiveForceTreeMap implements MassiveSet {
 | 
				
			||||||
//  of MassiveSet, if needed.
 | 
					    private int size = 0;
 | 
				
			||||||
public class MassiveForceTreeMap {
 | 
					    private Item root;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    // TODO: define missing parts of this class.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Adds a new key-value association to this map. If the key already exists in this map,
 | 
					     * Adds a new key-value association to this map. If the key already exists in this map,
 | 
				
			||||||
@@ -14,7 +14,37 @@ public class MassiveForceTreeMap {
 | 
				
			|||||||
     * Precondition: key != null.
 | 
					     * Precondition: key != null.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public Vector3 put(Massive key, Vector3 value) {
 | 
					    public Vector3 put(Massive key, Vector3 value) {
 | 
				
			||||||
        // TODO: implement method.
 | 
					        if (root == null) {
 | 
				
			||||||
 | 
					            root = new Item(key, value);
 | 
				
			||||||
 | 
					            size++;
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Item item = root;
 | 
				
			||||||
 | 
					        while (item != null) {
 | 
				
			||||||
 | 
					            if (item.key.equals(key)) {
 | 
				
			||||||
 | 
					                Vector3 old = item.value;
 | 
				
			||||||
 | 
					                item.value = value;
 | 
				
			||||||
 | 
					                return old;
 | 
				
			||||||
 | 
					            } else if (item.key.mass() > key.mass()) {
 | 
				
			||||||
 | 
					                if (item.left != null) {
 | 
				
			||||||
 | 
					                    item = item.left;
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    item.setLeft(new Item(key, value));
 | 
				
			||||||
 | 
					                    size++;
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                if (item.right != null) {
 | 
				
			||||||
 | 
					                    item = item.right;
 | 
				
			||||||
 | 
					                } else{
 | 
				
			||||||
 | 
					                    item.setRight(new Item(key, value));
 | 
				
			||||||
 | 
					                    size++;
 | 
				
			||||||
 | 
					                    break;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return null;
 | 
					        return null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -24,7 +54,16 @@ public class MassiveForceTreeMap {
 | 
				
			|||||||
     * Precondition: key != null.
 | 
					     * Precondition: key != null.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public Vector3 get(Massive key) {
 | 
					    public Vector3 get(Massive key) {
 | 
				
			||||||
        // TODO: implement method.
 | 
					        Item item = root;
 | 
				
			||||||
 | 
					        while (item != null) {
 | 
				
			||||||
 | 
					            if (item.key.equals(key)) {
 | 
				
			||||||
 | 
					                return item.value;
 | 
				
			||||||
 | 
					            } else if (item.key.mass() > key.mass()) {
 | 
				
			||||||
 | 
					                item = item.left;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                item = item.right;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        return null;
 | 
					        return null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -33,17 +72,36 @@ public class MassiveForceTreeMap {
 | 
				
			|||||||
     * Precondition: key != null
 | 
					     * Precondition: key != null
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public boolean containsKey(Massive key) {
 | 
					    public boolean containsKey(Massive key) {
 | 
				
			||||||
        // TODO: implement method.
 | 
					        Item item = root;
 | 
				
			||||||
 | 
					        while (item != null) {
 | 
				
			||||||
 | 
					            if (item.key.equals(key)) {
 | 
				
			||||||
 | 
					                return true;
 | 
				
			||||||
 | 
					            } else if (item.key.mass() > key.mass()) {
 | 
				
			||||||
 | 
					                item = item.left;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                item = item.right;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String toString(Item item) {
 | 
				
			||||||
 | 
					        String s = "";
 | 
				
			||||||
 | 
					        if (item == null) {
 | 
				
			||||||
 | 
					            return s;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        s += this.toString(item.right);
 | 
				
			||||||
 | 
					        s += String.format("{%s: %s}\n", item.key, item.value);
 | 
				
			||||||
 | 
					        s += this.toString(item.left);
 | 
				
			||||||
 | 
					        return s;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Returns a readable representation of this map, in which key-value pairs are ordered
 | 
					     * Returns a readable representation of this map, in which key-value pairs are ordered
 | 
				
			||||||
     * descending according to 'key.getMass()'.
 | 
					     * descending according to 'key.getMass()'.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public String toString() {
 | 
					    public String toString() {
 | 
				
			||||||
        // TODO: implement method.
 | 
					        return (root != null) ? toString(root) : "";
 | 
				
			||||||
        return "";
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@@ -51,10 +109,126 @@ public class MassiveForceTreeMap {
 | 
				
			|||||||
     * elements of the returned `MassiveSet` object also affects the keys in this tree map.
 | 
					     * elements of the returned `MassiveSet` object also affects the keys in this tree map.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public MassiveSet getKeys() {
 | 
					    public MassiveSet getKeys() {
 | 
				
			||||||
        // TODO: implement method.
 | 
					        return this;
 | 
				
			||||||
        return null;
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void draw(CodeDraw cd) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public MassiveIterator iterator() {
 | 
				
			||||||
 | 
					        return new MassiveIterator() {
 | 
				
			||||||
 | 
					            private Item next = root.getLeftLeaf();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public Massive next() {
 | 
				
			||||||
 | 
					                if (next == null) return null;
 | 
				
			||||||
 | 
					                Massive m = next.key;
 | 
				
			||||||
 | 
					                Item newNext = (next.right != null) ? next.right.getLeftLeaf() : next.parent;
 | 
				
			||||||
 | 
					                while (newNext != null && newNext.right == next) {
 | 
				
			||||||
 | 
					                    next = newNext;
 | 
				
			||||||
 | 
					                    newNext = newNext.parent;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                next = newNext;
 | 
				
			||||||
 | 
					                return m;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public boolean hasNext() {
 | 
				
			||||||
 | 
					                return next != null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public boolean contains(Massive element) {
 | 
				
			||||||
 | 
					        return containsKey(element);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void remove(Massive element) {
 | 
				
			||||||
 | 
					        Item item = root;
 | 
				
			||||||
 | 
					        while (item != null) {
 | 
				
			||||||
 | 
					            if (item.key.equals(element)) {
 | 
				
			||||||
 | 
					                Item newP = null;
 | 
				
			||||||
 | 
					                if (item.left != null) {
 | 
				
			||||||
 | 
					                    newP = item.left.getRightLeaf();
 | 
				
			||||||
 | 
					                } else if (item.right != null) {
 | 
				
			||||||
 | 
					                    newP = item.right.getLeftLeaf();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (item.parent.left == item) {
 | 
				
			||||||
 | 
					                    item.parent.setLeft(newP);
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    item.parent.setRight(newP);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                size--;
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            } else if (item.key.mass() > element.mass()) {
 | 
				
			||||||
 | 
					                item = item.left;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                item = item.right;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void clear() {
 | 
				
			||||||
 | 
					        size = 0;
 | 
				
			||||||
 | 
					        root = null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public int size() {
 | 
				
			||||||
 | 
					        return size;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public MassiveLinkedList toList() {
 | 
				
			||||||
 | 
					        MassiveLinkedList list = new MassiveLinkedList();
 | 
				
			||||||
 | 
					        for (Massive m : this) {
 | 
				
			||||||
 | 
					            list.addLast(m);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return list;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static class Item {
 | 
				
			||||||
 | 
					        private final Massive key;
 | 
				
			||||||
 | 
					        private Vector3 value;
 | 
				
			||||||
 | 
					        private Item parent;
 | 
				
			||||||
 | 
					        private Item left;
 | 
				
			||||||
 | 
					        private Item right;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Item(Massive key, Vector3 value) {
 | 
				
			||||||
 | 
					            this.key = key;
 | 
				
			||||||
 | 
					            this.value = value;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void setLeft(Item left) {
 | 
				
			||||||
 | 
					            this.left = left;
 | 
				
			||||||
 | 
					            if (left != null) left.parent = this;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public void setRight(Item right) {
 | 
				
			||||||
 | 
					            this.right = right;
 | 
				
			||||||
 | 
					            if (right != null) right.parent = this;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Item getLeftLeaf() {
 | 
				
			||||||
 | 
					            Item cur = this;
 | 
				
			||||||
 | 
					            while (cur.left != null) {
 | 
				
			||||||
 | 
					                cur = cur.left;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return cur;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public Item getRightLeaf() {
 | 
				
			||||||
 | 
					            Item cur = this;
 | 
				
			||||||
 | 
					            while (cur.right != null) {
 | 
				
			||||||
 | 
					                cur = cur.right;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return cur;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
//TODO: Define additional class(es) implementing the binary search tree and the implementation
 | 
					 | 
				
			||||||
// of MassiveSet (either here or in a separate file).
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -98,7 +98,7 @@ public class MassiveLinkedList implements Iterable<Massive> {
 | 
				
			|||||||
            return null;
 | 
					            return null;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        Massive m = last.body;
 | 
					        Massive m = last.body;
 | 
				
			||||||
        last = last.next;
 | 
					        last = last.prev;
 | 
				
			||||||
        if (last != null) last.setNext(null);
 | 
					        if (last != null) last.setNext(null);
 | 
				
			||||||
        size--;
 | 
					        size--;
 | 
				
			||||||
        return m;
 | 
					        return m;
 | 
				
			||||||
@@ -194,7 +194,7 @@ public class MassiveLinkedList implements Iterable<Massive> {
 | 
				
			|||||||
        };
 | 
					        };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private class Item {
 | 
					    private static class Item {
 | 
				
			||||||
        private final Massive body;
 | 
					        private final Massive body;
 | 
				
			||||||
        private Item prev;
 | 
					        private Item prev;
 | 
				
			||||||
        private Item next;
 | 
					        private Item next;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user