1 /**
2 This is a simplified implementation of an array list.
3 */
4 public class ArrayList
5 {
6 private Object[] elements;
7 private int currentSize;
8
9 /**
10 Constructs an empty array list.
11 */
12 public ArrayList()
13 {
14 final int INITIAL_SIZE = 10;
15 elements = new Object[INITIAL_SIZE];
16 currentSize = 0;
17 }
18
19 /**
20 Gets the size of this array list.
21 @return the size
22 */
23 public int size() { return currentSize; }
24
25 /**
26 Throws an IndexOutOfBoundsException if the checked index is out of bounds
27 @param n the index to check
28 */
29 private void checkBounds(int n)
30 {
31 if (n < 0 || n >= currentSize)
32 {
33 throw new IndexOutOfBoundsException();
34 }
35 }
36
37 /**
38 Gets the element at a given position.
39 @param pos the position
40 @return the element at pos
41 */
42 public Object get(int pos)
43 {
44 checkBounds(pos);
45 return elements[pos];
46 }
47
48 /**
49 Sets the element at a given position.
50 @param pos the position
51 @param element the new value
52 */
53 public void set(int pos, Object element)
54 {
55 checkBounds(pos);
56 elements[pos] = element;
57 }
58
59 /**
60 Removes the element at a given position.
61 @param pos the position
62 @return the removed element
63 */
64 public Object remove(int pos)
65 {
66 checkBounds(pos);
67
68 Object removed = elements[pos];
69
70 for (int i = pos + 1; i < currentSize; i++)
71 {
72 elements[i - 1] = elements[i];
73 }
74
75 currentSize--;
76
77 return removed;
78 }
79
80 /**
81 Adds an element after a given position.
82 @param pos the position
83 @param newElement the element to add
84 */
85 public boolean add(int pos, Object newElement)
86 {
87 growIfNecessary();
88 currentSize++;
89
90 checkBounds(pos);
91
92 for (int i = currentSize - 1; i > pos; i--)
93 {
94 elements[i] = elements[i - 1];
95 }
96
97 elements[pos] = newElement;
98 return true;
99 }
100
101 /**
102 Adds an element after the end of the array list
103 @param newElement the element to add
104 */
105 public boolean addLast(Object newElement)
106 {
107 growIfNecessary();
108 currentSize++;
109
110 elements[currentSize - 1] = newElement;
111 return true;
112 }
113
114 /**
115 Grows the elements array if the current size equals the capacity.
116 */
117 private void growIfNecessary()
118 {
119 if (currentSize == elements.length)
120 {
121 Object[] newElements = new Object[2 * elements.length];
122 for (int i = 0; i < elements.length; i++)
123 {
124 newElements[i] = elements[i];
125 }
126 elements = newElements;
127 }
128 }
129 }