OSDN Git Service

e7f9540bc19733d911e3f9e0272e022c3bcefdb7
[nxt-jsp/lejos_nxj.git] / nxtOSEK / lejos_nxj / src / java / classes / java / util / ArrayList.java
1 package java.util;\r
2 \r
3 /**\r
4  * \r
5  * @author Andre Nijholt\r
6  */\r
7 public class ArrayList {\r
8         private static final int INITIAL_CAPACITY       = 7;\r
9         private static final int CAPACITY_INCREMENT = 3;\r
10         \r
11         protected Object[] elementData;\r
12         protected int capacityIncrement;\r
13         protected int elementCount;\r
14 \r
15         public ArrayList(int initialCapacity) {\r
16             if (initialCapacity < 0) initialCapacity = 0;\r
17                 elementData = new Object[initialCapacity];\r
18                 capacityIncrement = CAPACITY_INCREMENT;\r
19                 elementCount = 0;\r
20         }\r
21         \r
22         public ArrayList(Object[] elements) {\r
23                 // Set initial capacity to 130% (normally specified 110%)\r
24                 this((elements.length * 13) / 10);\r
25                 addAll(elements);\r
26         }\r
27 \r
28         public ArrayList() {\r
29                 this(INITIAL_CAPACITY);\r
30         }\r
31 \r
32         public void add(int index, Object element) {\r
33                 if (index > elementCount) {\r
34                         throw new ArrayIndexOutOfBoundsException();\r
35                 }\r
36 \r
37                 ensureCapacity(elementCount + 1);\r
38                 for (int i = elementCount; i > index; i--) {\r
39                         elementData[i] = elementData[i - 1];\r
40                 }\r
41                 elementData[index] = element;\r
42                 elementCount++;\r
43         }\r
44         \r
45 \r
46         public void add(Object o) {\r
47             ensureCapacity(elementCount + 1);\r
48             elementData[elementCount++] = o;\r
49         }\r
50         \r
51         public void addAll(Object [] elements) {\r
52                 if (elements == null) return;\r
53                 ensureCapacity(elementCount + elements.length);\r
54                 \r
55                 for (int i = 0; i < elements.length; i++) {\r
56                         elementData[elementCount++] = elements[i];\r
57                 }\r
58         }\r
59         \r
60         public void addAll(int index, Object [] elements) {\r
61                 if (elements == null) return;\r
62                 if (index > elementCount) {\r
63                         throw new ArrayIndexOutOfBoundsException();\r
64                 }\r
65 \r
66                 ensureCapacity(elementCount + elements.length);\r
67                 for (int i = elementCount + elements.length - 1; i > index; i--) {\r
68                         elementData[i] = elementData[i - elements.length];\r
69                 }\r
70                 for (int i = 0; i < elements.length; i++) {\r
71                         elementData[i + index] = elements[i];\r
72                         elementCount++;\r
73                 }\r
74         }\r
75         \r
76         public void clear() {\r
77                 for (int i = 0; i < elementCount; i++) {\r
78                         elementData[i] = null;\r
79                 }\r
80         }\r
81         \r
82         public boolean contains(Object o) {\r
83                 for (int i = 0; i < elementCount; i++) {\r
84                         if (elementData[i].equals(o)) return true;\r
85                 }\r
86                 \r
87                 return false;\r
88         }\r
89         \r
90         public Object get(int index) {\r
91                 if (index > elementCount) {\r
92                         throw new ArrayIndexOutOfBoundsException();\r
93                 }\r
94 \r
95                 return elementData[index];\r
96         }\r
97         \r
98         public int indexOf(Object o) {\r
99                 for (int i = 0; i < elementCount; i++) {\r
100                         if (elementData[i].equals(o)) return i;\r
101                 }\r
102                 \r
103                 return -1;\r
104         }\r
105 \r
106         public int lastIndexOf(Object o) {\r
107                 for (int i = elementCount - 1; i >= 0; i--) {\r
108                         if (elementData[i].equals(o)) return i;\r
109                 }\r
110                 \r
111                 return -1;\r
112         }\r
113         \r
114         public boolean isEmpty() {\r
115                 return (elementCount == 0);\r
116         }\r
117 \r
118         public Object remove(int index) {\r
119                 if (index > elementCount) {\r
120                         throw new ArrayIndexOutOfBoundsException();\r
121                 }\r
122 \r
123                 Object o = elementData[index];\r
124                 for (int i = index; i < elementCount; i++) {\r
125                         elementData[i] = elementData[i + 1];\r
126                 }\r
127                 elementCount--;\r
128                 return o;\r
129         }\r
130         \r
131         public Object set(int index, Object element) {\r
132                 if (index > elementCount) {\r
133                         throw new ArrayIndexOutOfBoundsException();\r
134                 }\r
135 \r
136                 Object o = elementData[index];\r
137                 elementData[index] = element;\r
138                 return o;\r
139         }\r
140         \r
141         public int size() {\r
142                 return elementCount;\r
143         }\r
144 \r
145         private void ensureCapacity(int minCapacity) {\r
146             if (elementData.length < minCapacity) {\r
147                 int newCapacity = (capacityIncrement > 0)\r
148                         ? (elementData.length + capacityIncrement)\r
149                         : (elementData.length * 2);\r
150                 if (newCapacity < minCapacity) {\r
151                         newCapacity = minCapacity;\r
152                 }\r
153 \r
154                 Object oldData[] = elementData;\r
155                 elementData = new Object[newCapacity];\r
156                 arraycopy(oldData, 0, elementData, 0, elementCount);\r
157             }\r
158         }\r
159         \r
160         private void arraycopy(Object[] src, int srcOffset, Object[] dst, int dstOffset, int length) {\r
161                 for (int i = 0; i < length; i++)\r
162                         dst[i + dstOffset] = src[i + srcOffset];\r
163         }\r
164 \r
165 \r
166 }\r