老紫竹JAVA提高教程(8)-认识List列表之Vector

 
Vector和ArrayList的最大区别就是Vector的主要集合方法是线程同步的。
  1. package collection.lession8;
  2. import java.util.Arrays;
  3. import java.util.Collection;
  4. import java.util.Enumeration;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.Vector;
  8. /**
  9.  * 老紫竹JAVA提高教程(8)-认识List列表之Vector.<br>
  10.  * Vector和ArrayList的最大区别就是<br>
  11.  * Vector的主要集合方法是线程同步的.<br>
  12.  * <br>
  13.  * 注意:如下代码绝大部分和ArrayList代码完全相同<br>
  14.  * 只是把ArrayList替换为Vector
  15.  * 
  16.  * @author 老紫竹 JAVA世纪网(java2000.net)
  17.  * 
  18.  */
  19. public class Lession8 {
  20.   public static void main(String[] args) {
  21.     testNormal();
  22.     testSpecial();
  23.     // 一个最常见的错误
  24.     testForProblem();
  25.     // 测试Vector的特殊方法
  26.     testForVector();
  27.   }
  28.   public static void testForVector() {
  29.     // 可以指定每次增加的容量尺寸
  30.     // 初始化为100个,每次增加12个
  31.     Vector v1 = new Vector(1212);
  32.     v1.add(1);
  33.     v1.add(2.34);
  34.     v1.add("abc");
  35.     showList(v1);
  36.     // 显示容量
  37.     System.out.println("capicity=" + v1.capacity());
  38.     // 可以复制数据到数组
  39.     Object[] anArray = new Object[v1.size()];
  40.     v1.copyInto(anArray);
  41.     System.out.println(Arrays.toString(anArray));
  42.     // 可以设置尺寸
  43.     // 采用null进行位置填充
  44.     System.out.println("size=" + v1.size());
  45.     v1.setSize(16);
  46.     System.out.println("size=" + v1.size());
  47.     showList(v1);
  48.     // 显示容量
  49.     // 可以看到容量已经增加了
  50.     System.out.println("capicity=" + v1.capacity());
  51.     // 获得枚举
  52.     Enumeration en = v1.elements();
  53.     // 下面是一些相关的操作,我就不一个一个的写了
  54.     // 
  55.     // public synchronized E firstElement();
  56.     // public synchronized E lastElement();
  57.     // public synchronized void setElementAt(E obj, int index) ;
  58.     // public synchronized void removeElementAt(int index);
  59.     // public synchronized void insertElementAt(E obj, int index);
  60.     // public synchronized void addElement(E obj);
  61.     // public synchronized boolean removeElement(Object obj);
  62.     // public synchronized void removeAllElements();
  63.   }
  64.   public static void testNormal() {
  65.     // -------------------------------------------------------
  66.     // 声明一个列表
  67.     // 允许放入任何数据
  68.     // -------------------------------------------------------
  69.     Vector list = new Vector();
  70.     // 放入整数
  71.     // 当然你用 new Integer(1)也可以
  72.     list.add(1);
  73.     // 放入字符串
  74.     list.add("abc");
  75.     // 放入浮点数
  76.     list.add(new Float(1.11));
  77.     // add会将数据保存到列表的尾部
  78.     showList(list); // 1, abc, 1.11]
  79.     // 下面我们在列表的头部增加数据
  80.     list.add(02);
  81.     list.add(0"bcd");
  82.     list.add(0new Double(2.34));
  83.     // 列表可以指定插入的位置
  84.     // 0 是头部第一个位置,所以数据都逐个放到最前面了
  85.     showList(list); // [2.34, bcd, 2, 1, abc, 1.11]
  86.     // 下面我们插入到我们希望的任何位置
  87.     // 当然不能越界,(0 到 list.size()-1)范围内才可以
  88.     list.add(13);
  89.     list.add(4"xyz");
  90.     // 数据被放到了正确的位置
  91.     showList(list); // [2.34, 3, bcd, 2, xyz, 1, abc, 1.11]
  92.     // -------------------------------------------------------
  93.     // 我们有了数据,我们来测试读取数据
  94.     // -------------------------------------------------------
  95.     // 我们可以通过指定索引的位置,来拿到我们希望的数据
  96.     System.out.println(list.get(0)); // 2.34
  97.     System.out.println(list.get(4)); // xyz
  98.     // -------------------------------------------------------
  99.     // 测试是否存在某个数据
  100.     // -------------------------------------------------------
  101.     System.out.println(list.contains("xyz")); // true
  102.     // 测试是否包含一组数据
  103.     Collection c = new Vector();
  104.     c.add(1);
  105.     c.add(2);
  106.     System.out.println(list.containsAll(c)); // true
  107.     c.add(3);
  108.     c.add(4);
  109.     // containsAll_1234=false
  110.     System.out.println(list.containsAll(c)); // false
  111.     // -------------------------------------------------------
  112.     // 查找某个数据所在的索引位置
  113.     // 如果不存在,返回-1
  114.     // -------------------------------------------------------
  115.     System.out.println(list.indexOf(3)); // 1
  116.     System.out.println(list.indexOf("xyz")); // 4
  117.     System.out.println(list.indexOf("abcd")); // -1
  118.     // -------------------------------------------------------
  119.     // 测试删除数据
  120.     // 请注意,
  121.     // 如果你使用整数(int)数字,则默认调用的是remove(int index);
  122.     // 如果你用 long,则会调用 remove(Object obj);
  123.     // 所以如果你要删除整数,请使用 remove(new Integer(int));
  124.     // -------------------------------------------------------
  125.     // 删除索引为1的数据
  126.     list.remove(1);
  127.     // 索引为1的数据被干掉了
  128.     showList(list); // [2.34, bcd, 2, xyz, 1, abc, 1.11]
  129.     // 删除数字1 和字符串 abc
  130.     list.remove(new Integer(1));
  131.     list.remove("xyz");
  132.     showList(list); // [2.34, bcd, 2, abc, 1.11]
  133.     // -------------------------------------------------------
  134.     // 迭代器的使用
  135.     // -------------------------------------------------------
  136.     Iterator it = list.iterator();
  137.     while (it.hasNext()) {
  138.       System.out.print(it.next() + " "); // 2.34 bcd 2 abc 1.11
  139.     }
  140.     System.out.println();
  141.     // -------------------------------------------------------
  142.     // 转化为数组
  143.     // -------------------------------------------------------
  144.     Object[] objs = list.toArray();
  145.     for (Object obj : objs) {
  146.       System.out.print(obj + " "); // 2.34 bcd 2 abc 1.11
  147.     }
  148.     System.out.println();
  149.   }
  150.   public static void testSpecial() {
  151.     // -------------------------------------------------------
  152.     // 测试重复和null
  153.     // -------------------------------------------------------
  154.     //
  155.     List<Integer> list = new Vector<Integer>();
  156.     list.add(123);
  157.     list.add(456);
  158.     list.add(123);
  159.     list.add(456);
  160.     // 数据允许重复
  161.     showList(list); // [123, 456, 123, 456]
  162.     list.add(null);
  163.     list.add(789);
  164.     list.add(null);
  165.     list.add(999);
  166.     // 允许放入多个null
  167.     showList(list); // [123, 456, 123, 456, null, 789, null, 999]
  168.     // -------------------------------------------------------
  169.     // 测试一下查找最后一次出现的位置
  170.     // -------------------------------------------------------
  171.     System.out.println(list.indexOf(123)); // 0
  172.     System.out.println(list.lastIndexOf(123)); // 2
  173.     // -------------------------------------------------------
  174.     // 转化为数组
  175.     // 记得要转化为Inerger.
  176.     // -------------------------------------------------------
  177.     Integer[] nums = (Integer[]) list.toArray(new Integer[0]);
  178.     // 注意数据里面有null,所以循环变量不要用int 要用Integer
  179.     for (Integer num : nums) {
  180.       System.out.print(num + " "); // 123 456 123 456 null 789 null 999
  181.     }
  182.     System.out.println();
  183.   }
  184.   public static void testForProblem() {
  185.     // 一些朋友在向循环里向列表增加对象的时候
  186.     // 经常忘记初始化,造成最终加入的都是同一个对象
  187.     List<MyObject2> list = new Vector<MyObject2>();
  188.     MyObject2 obj = new MyObject2();
  189.     for (int i = 1; i <= 5; i++) {
  190.       obj.setName("Name" + i);
  191.       list.add(obj);
  192.     }
  193.     // 里面的数据都是最后一个
  194.     showList(list); // [Name5, Name5, Name5, Name5, Name5]
  195.     // 正确的做法
  196.     List<MyObject2> list2 = new Vector<MyObject2>();
  197.     MyObject2 obj2 = null;
  198.     for (int i = 1; i <= 5; i++) {
  199.       obj2 = new MyObject2();
  200.       obj2.setName("Name" + i);
  201.       list2.add(obj2);
  202.     }
  203.     // 里面的数据都是最后一个
  204.     showList(list2); // [Name1, Name2, Name3, Name4, Name5]
  205.   }
  206.   /**
  207.    * 显示List里面的数据。
  208.    * 
  209.    * @param list
  210.    */
  211.   private static void showList(List list) {
  212.     System.out.println(Arrays.toString(list.toArray()));
  213.   }
  214. }
  215. class MyObject2 {
  216.   private String name;
  217.   public String getName() {
  218.     return name;
  219.   }
  220.   public void setName(String name) {
  221.     this.name = name;
  222.   }
  223.   /**
  224.    * 重写toString方法,输出name
  225.    */
  226.   public String toString() {
  227.     return name;
  228.   }
  229. }

你可能感兴趣的:(java,list,vector,测试,null,Integer)