JAVA程序员提高教程(8)-认识List列表之Vector

    作者:课课家教育更新于: 2016-02-01 14:26:23

    大神带你学编程,欢迎选课

      Vector和ArrayList的最大区别就是Vector的主要集合方法是线程同步的。

    JAVA程序员提高教程(8)-认识List列表之Vector_java课程标准_java入门_课课家

      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./**

      12. * Vector和ArrayList的最大区别就是

      13. * Vector的主要集合方法是线程同步的.

      14. *

      15. * 注意:如下代码绝大部分和ArrayList代码完全相同

      16. * 只是把ArrayList替换为Vector

      17. *

      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 list = new Vector();

      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 list = new Vector();

      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 list2 = new Vector();

      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.}

课课家教育

未登录