Vector和ArrayList的最大區別就是Vector的主要集合方法是線程同步的。
1.package collection.lession8;
2.
3.import java.util.Arrays;
4.import java.util.Collection;
5.import java.util.Enumeration;
6.import java.util.Iterator;
7.import java.util.List;
8.import java.util.Vector;
9.
10./**
11. * 老紫竹JAVA提高教程(8)-認識List列表之Vector.<br>
12. * Vector和ArrayList的最大區別就是<br>
13. * Vector的主要集合方法是線程同步的.<br>
14. * <br>
15. * 注意:如下代碼絕大部分和ArrayList代碼完全相同<br>
16. * 只是把ArrayList替換為Vector
17. *
18. * @author 老紫竹 JAVA世紀網(java2000.net)
19. *
20. */
21.public class Lession8 {
22.
23. public static void main(String[] args) {
24. testNormal();
25. testSpecial();
26. // 一個最常見的錯誤
27. testForProblem();
28. // 測試Vector的特殊方法
29. testForVector();
30. }
31.
32. public static void testForVector() {
33. // 可以指定每次增加的容量尺寸
34. // 初始化為100個,每次增加12個
35. Vector v1 = new Vector(12, 12);
36. v1.add(1);
37. v1.add(2.34);
38. v1.add("abc");
39. showList(v1);
40.
41. // 顯示容量
42. System.out.println("capicity=" + v1.capacity());
43.
44. // 可以復制數據到數組
45. Object[] anArray = new Object[v1.size()];
46. v1.copyInto(anArray);
47. System.out.println(Arrays.toString(anArray));
48.
49. // 可以設置尺寸
50. // 采用null進行位置填充
51. System.out.println("size=" + v1.size());
52. v1.setSize(16);
53. System.out.println("size=" + v1.size());
54. showList(v1);
55.
56. // 顯示容量
57. // 可以看到容量已經增加了
58. System.out.println("capicity=" + v1.capacity());
59.
60. // 獲得枚舉
61. Enumeration en = v1.elements();
62. // 下面是一些相關的操作,我就不一個一個的寫了
63. //
64. // public synchronized E firstElement();
65. // public synchronized E lastElement();
66. // public synchronized void setElementAt(E obj, int index) ;
67. // public synchronized void removeElementAt(int index);
68. // public synchronized void insertElementAt(E obj, int index);
69. // public synchronized void addElement(E obj);
70. // public synchronized boolean removeElement(Object obj);
71. // public synchronized void removeAllElements();
72. }
73.
74. public static void testNormal() {
75. // -------------------------------------------------------
76. // 聲明一個列表
77. // 允許放入任何數據
78. // -------------------------------------------------------
79. Vector list = new Vector();
80. // 放入整數
81. // 當然你用 new Integer(1)也可以
82. list.add(1);
83. // 放入字符串
84. list.add("abc");
85. // 放入浮點數
86. list.add(new Float(1.11));
87. // add會將數據保存到列表的尾部
88. showList(list); // 1, abc, 1.11]
89.
90. // 下面我們在列表的頭部增加數據
91. list.add(0, 2);
92. list.add(0, "bcd");
93. list.add(0, new Double(2.34));
94. // 列表可以指定插入的位置
95. // 0 是頭部第一個位置,所以數據都逐個放到最前面了
96. showList(list); // [2.34, bcd, 2, 1, abc, 1.11]
97.
98. // 下面我們插入到我們希望的任何位置
99. // 當然不能越界,(0 到 list.size()-1)范圍內才可以
100. list.add(1, 3);
101. list.add(4, "xyz");
102. // 數據被放到了正確的位置
103. showList(list); // [2.34, 3, bcd, 2, xyz, 1, abc, 1.11]
104.
105. // -------------------------------------------------------
106. // 我們有了數據,我們來測試讀取數據
107. // -------------------------------------------------------
108. // 我們可以通過指定索引的位置,來拿到我們希望的數據
109. System.out.println(list.get(0)); // 2.34
110. System.out.println(list.get(4)); // xyz
111.
112. // -------------------------------------------------------
113. // 測試是否存在某個數據
114. // -------------------------------------------------------
115. System.out.println(list.contains("xyz")); // true
116.
117. // 測試是否包含一組數據
118. Collection c = new Vector();
119. c.add(1);
120. c.add(2);
121. System.out.println(list.containsAll(c)); // true
122. c.add(3);
123. c.add(4);
124. // containsAll_1234=false
125. System.out.println(list.containsAll(c)); // false
126.
127. // -------------------------------------------------------
128. // 查找某個數據所在的索引位置
129. // 如果不存在,返回-1
130. // -------------------------------------------------------
131. System.out.println(list.indexOf(3)); // 1
132. System.out.println(list.indexOf("xyz")); // 4
133. System.out.println(list.indexOf("abcd")); // -1
134.
135. // -------------------------------------------------------
136. // 測試刪除數據
137. // 請注意,
138. // 如果你使用整數(int)數字,則默認調用的是remove(int index);
139. // 如果你用 long,則會調用 remove(Object obj);
140. // 所以如果你要刪除整數,請使用 remove(new Integer(int));
141. // -------------------------------------------------------
142. // 刪除索引為1的數據
143. list.remove(1);
144. // 索引為1的數據被干掉了
145. showList(list); // [2.34, bcd, 2, xyz, 1, abc, 1.11]
146.
147. // 刪除數字1 和字符串 abc
148. list.remove(new Integer(1));
149. list.remove("xyz");
150. showList(list); // [2.34, bcd, 2, abc, 1.11]
151.
152. // -------------------------------------------------------
153. // 迭代器的使用
154. // -------------------------------------------------------
155. Iterator it = list.iterator();
156. while (it.hasNext()) {
157. System.out.print(it.next() + " "); // 2.34 bcd 2 abc 1.11
158. }
159. System.out.println();
160.
161. // -------------------------------------------------------
162. // 轉化為數組
163. // -------------------------------------------------------
164. Object[] objs = list.toArray();
165. for (Object obj : objs) {
166. System.out.print(obj + " "); // 2.34 bcd 2 abc 1.11
167. }
168. System.out.println();
169. }
170.
171. public static void testSpecial() {
172. // -------------------------------------------------------
173. // 測試重復和null
174. // -------------------------------------------------------
175. //
176. List<Integer> list = new Vector<Integer>();
177. list.add(123);
178. list.add(456);
179. list.add(123);
180. list.add(456);
181. // 數據允許重復
182. showList(list); // [123, 456, 123, 456]
183.
184. list.add(null);
185. list.add(789);
186. list.add(null);
187. list.add(999);
188. // 允許放入多個null
189. showList(list); // [123, 456, 123, 456, null, 789, null, 999]
190.
191. // -------------------------------------------------------
192. // 測試一下查找最後一次出現的位置
193. // -------------------------------------------------------
194. System.out.println(list.indexOf(123)); // 0
195. System.out.println(list.lastIndexOf(123)); // 2
196.
197. // -------------------------------------------------------
198. // 轉化為數組
199. // 記得要轉化為Inerger.
200. // -------------------------------------------------------
201. Integer[] nums = (Integer[]) list.toArray(new Integer[0]);
202. // 注意數據裡面有null,所以循環變量不要用int 要用Integer
203. for (Integer num : nums) {
204. System.out.print(num + " "); // 123 456 123 456 null 789 null 999
205. }
206. System.out.println();
207.
208. }
209.
210. public static void testForProblem() {
211. // 一些朋友在向循環裡向列表增加對象的時候
212. // 經常忘記初始化,造成最終加入的都是同一個對象
213. List<MyObject2> list = new Vector<MyObject2>();
214. MyObject2 obj = new MyObject2();
215. for (int i = 1; i <= 5; i++) {
216. obj.setName("Name" + i);
217. list.add(obj);
218. }
219. // 裡面的數據都是最後一個
220. showList(list); // [Name5, Name5, Name5, Name5, Name5]
221.
222. // 正確的做法
223. List<MyObject2> list2 = new Vector<MyObject2>();
224. MyObject2 obj2 = null;
225. for (int i = 1; i <= 5; i++) {
226. obj2 = new MyObject2();
227. obj2.setName("Name" + i);
228. list2.add(obj2);
229. }
230. // 裡面的數據都是最後一個
231. showList(list2); // [Name1, Name2, Name3, Name4, Name5]
232. }
233.
234. /**
235. * 顯示List裡面的數據。
236. *
237. * @param list
238. */
239. private static void showList(List list) {
240. System.out.println(Arrays.toString(list.toArray()));
241. }
242.}
243.
244.class MyObject2 {
245. private String name;
246.
247. public String getName() {
248. return name;
249. }
250.
251. public void setName(String name) {
252. this.name = name;
253. }
254.
255. /**
256. * 重寫toString方法,輸出name
257. */
258. public String toString() {
259. return name;
260. }
261.}