Explorar el Código

Polish example linked-list exercise

Apply generics to the internals of Element to remove
needless casting.

Tighten Element scoping and move into Deque for succintness (sp).

Add the execise into the grade test suite.
Brian Mathiyakom hace 10 años
padre
commit
49c91eb095

+ 28
- 16
linked-list/src/example/java/Deque.java Ver fichero

1
 public final class Deque<T> {
1
 public final class Deque<T> {
2
-    private Element head;
2
+    private Element<T> head;
3
 
3
 
4
     public void push(T value) {
4
     public void push(T value) {
5
         if (head == null) {
5
         if (head == null) {
6
-            head = new Element(value, null, null);
7
-            head.setNext(head);
8
-            head.setPrev(head);
6
+            head = new Element<>(value, null, null);
7
+            head.next = head;
8
+            head.prev = head;
9
             return;
9
             return;
10
         }
10
         }
11
 
11
 
12
-        Element oldTail = head.getPrev();
13
-        Element tail = new Element(value, oldTail, head);
14
-        oldTail.setNext(tail);
15
-        head.setPrev(tail);
12
+        Element<T> oldTail = head.prev;
13
+        Element<T> tail = new Element<>(value, oldTail, head);
14
+        oldTail.next = tail;
15
+        head.prev = tail;
16
     }
16
     }
17
 
17
 
18
     public T pop() {
18
     public T pop() {
19
-        head = head.getPrev();
19
+        head = head.prev;
20
         return shift();
20
         return shift();
21
     }
21
     }
22
 
22
 
23
     public void unshift(T value) {
23
     public void unshift(T value) {
24
         push(value);
24
         push(value);
25
-        head = head.getPrev();
25
+        head = head.prev;
26
     }
26
     }
27
 
27
 
28
     public T shift() {
28
     public T shift() {
29
-        Object value = head.getValue();
29
+        T value = head.value;
30
 
30
 
31
-        Element newHead = head.getNext();
32
-        Element newTail = head.getPrev();
31
+        Element<T> newHead = head.next;
32
+        Element<T> newTail = head.prev;
33
 
33
 
34
         if (newHead == head) {
34
         if (newHead == head) {
35
             head = null;
35
             head = null;
36
         }
36
         }
37
         else {
37
         else {
38
-            newHead.setPrev(newTail);
39
-            newTail.setNext(newHead);
38
+            newHead.prev = newTail;
39
+            newTail.next = newHead;
40
             head = newHead;
40
             head = newHead;
41
         }
41
         }
42
 
42
 
43
-        return (T) value;
43
+        return value;
44
+    }
45
+
46
+    private static final class Element<T> {
47
+        private final T value;
48
+        private Element<T> prev;
49
+        private Element<T> next;
50
+
51
+        public Element(T value, Element<T> prev, Element<T> next) {
52
+            this.value = value;
53
+            this.prev = prev;
54
+            this.next = next;
55
+        }
44
     }
56
     }
45
 }
57
 }

+ 0
- 52
linked-list/src/example/java/Element.java Ver fichero

1
-public final class Element {
2
-    private final Object value;
3
-    private Element prev;
4
-    private Element next;
5
-
6
-    public Element(Object value, Element prev, Element next) {
7
-        this.value = value;
8
-        this.prev = prev;
9
-        this.next = next;
10
-    }
11
-
12
-    public Element getPrev() {
13
-        return prev;
14
-    }
15
-
16
-    public void setPrev(Element prev) {
17
-        this.prev = prev;
18
-    }
19
-
20
-    public Element getNext() {
21
-        return next;
22
-    }
23
-
24
-    public void setNext(Element next) {
25
-        this.next = next;
26
-    }
27
-
28
-    public Object getValue() {
29
-        return value;
30
-    }
31
-
32
-    @Override
33
-    public boolean equals(Object o) {
34
-        if (this == o) return true;
35
-        if (o == null || getClass() != o.getClass()) return false;
36
-
37
-        Element element = (Element) o;
38
-
39
-        if (value != null ? !value.equals(element.value) : element.value != null) return false;
40
-        if (prev != null ? !prev.equals(element.prev) : element.prev != null) return false;
41
-        return next != null ? next.equals(element.next) : element.next == null;
42
-
43
-    }
44
-
45
-    @Override
46
-    public int hashCode() {
47
-        int result = value != null ? value.hashCode() : 0;
48
-        result = 31 * result + (prev != null ? prev.hashCode() : 0);
49
-        result = 31 * result + (next != null ? next.hashCode() : 0);
50
-        return result;
51
-    }
52
-}

+ 1
- 0
settings.gradle Ver fichero

11
 include 'hamming'
11
 include 'hamming'
12
 include 'hexadecimal'
12
 include 'hexadecimal'
13
 include 'hello-world'
13
 include 'hello-world'
14
+include 'linked-list'
14
 include 'luhn'
15
 include 'luhn'
15
 include 'meetup'
16
 include 'meetup'
16
 include 'nucleotide-count'
17
 include 'nucleotide-count'