zoukankan      html  css  js  c++  java
  • Java——(五)Collection之List集合、ArrayList和Vector实现类

    ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

    一、List集合

      List集合代表一个元素有序、客重复的集合,集合中每个元素都有其对应的顺序索引。List

    集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List集合默认按元素的添加

    顺序设置元素的索引,例如第一次添加的元素索引为0,第二次添加的元素索引为1......

    1.List接口和ListIterator接口

      List作为Collection接口的子接口,所以可以使用Collection接口里全部的方法。而且List

    是有序集合,因此List集合里增加了一些根据索引来操作集合元素的方法。

    1)void add(int index, Object element):将元素element插入到List集合的index处。

    2)boolean addAll(int index, Collection c):将集合c所包含的所有元素都插入到List集合的

    index处。

    3)Object get(int index):返回集合index索引处的元素。

    4)int indexOf(Object o):返回对象o在List集合中第一次出现的位置索引。

    5)int lastIndexOf(Object o):返回对象o在List集合中最后一次出现的位置索引。

    6)Obejct remove(int index):删除并返回index索引处的元素。
    7)Object set(int index, Object element):将index索引处的元素替换成element对象,返

    回新元素。

    8)List subList(int fromIndex, int toIndex):返回从索引fromIndex(包含)到索引toIndex

    (不包含)处所哟机会元素组成的子集合。

    所有的List实现类都可以调用这些方法来操作集合元素。与Set集合相比,List增加了根据索引插

    入、替换和删除集合元素的方法。下面程序演示了List集合的常规用法。

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 
     4 
     5 public class ListTest {
     6 
     7     public static void main(String[] args) {
     8 
     9         List test = new ArrayList<>();
    10         //向test集合添加三个元素
    11         test.add(new String("黑马程序员"));
    12         test.add(new String("传智播客"));
    13         test.add(new String("CSDN"));
    14         System.out.println(test);
    15         //将新字符串对象插入在第二个位置
    16         test.add(1, new String("传智播客"));
    17         /*for (Object object : test) {
    18             System.out.println(object);
    19         }*/
    20         for (int i = 0; i < test.size(); i++) {
    21             System.out.println(test.get(i));
    22         }
    23         //删除第三个元素
    24         test.remove(2);
    25         System.out.println(test);
    26         //判断指定元素在List集合中的位置,输出2 ,表明唯一第二位
    27         System.out.println(test.indexOf(new String("CSDN")));
    28         //将第二个元素替换成新的字符串对象
    29         test.set(0, new String("CSDN"));
    30         System.out.println(test);
    31         //将test集合的第二个元素(包含)到第三个元素(不包含)截取成子集合
    32         System.out.println(test.subList(1, 2));
    33     }
    34 
    35 }

    运结果:

    [黑马程序员, 传智播客, CSDN]
    黑马程序员
    传智播客
    传智播客
    CSDN
    [黑马程序员, 传智播客, CSDN]
    2
    [CSDN, 传智播客, CSDN]
    [传智播客]

     2.ArrayList和Vector实现类

      ArrayList和Vector作为List类的两个典型实现,完全支持前面介绍的List接口的全部功能。

    ArrayList和Vector类都是基于数字是的List类,所有ArrayList和Vector类封装了一个动态的、

    允许再分配的Object[]数组。ArrayList或Vector对象使用initalCapacity参数来设置该数组的

    长度,当向ArrayList或Vector中添加元素超出了该数组的长度是,它们的initalCapacity会自

    动增加。如果创建空的ArrayList或Vector集合时不指定initalCapacity参数,则Object[]数组

    的长度默认为10。

      此外,ArrayList和Vector还提供了如下两个方法来重新分配Object[]数组。

      1)void ensureCapacity(int minCapacity):将ArrayList或Vector集合的Object[]数组

          增加minCapacity。  

      2)void trimToSize():调整ArrayList或Vector集合的Object[]数组长度为当期元素的个

          数。程序客调用该方法来减少ArrayList或Vector集合对象占用的存储空间。

      Vector还提供了一个Stack子类,它用于模拟“栈”这种数据结构,“栈”通常是指“后进先出”

    (LIFO)的容器。最后“push”进栈的元素,将最先被“pop”出栈。与Java中的其他集合一样,进

    栈出栈的都是Object,因此从栈中取出元素后必须进行类型转换。所以Stack类里提供了如下几

    个方法。

    1)Object peek():返回“栈”的第一个元素,但并不将该元素“pop”出栈。

    2)Object pop():返回“栈”的第一个元素,并将该元素“pop”出栈。

    3)void push(Object item):将一个元素“push”进栈,最后一个进“栈”的元素总是位于“栈”顶。

    如下程序示范 Vector作为“栈”的功能。

     1 import java.util.Stack;
     2 
     3 
     4 public class VectorTest {
     5 
     6     public static void main(String[] args) {
     7 
     8         Stack vStack = new Stack<>();
     9         //一次将三个元素“push”入栈
    10         vStack.push("黑马程序员");
    11         vStack.push("传智播客");
    12         vStack.push("CSDN");
    13         
    14         System.out.println(vStack);
    15         //访问第一元素,但并不将其“pop”出栈
    16         System.out.println(vStack.peek());
    17         System.out.println(vStack);
    18         //“pop”出栈第一个元素
    19         System.out.println(vStack.pop());
    20         System.out.println(vStack);
    21     }
    22 
    23 }

    运行结果:

    [黑马程序员, 传智播客, CSDN]
    CSDN
    [黑马程序员, 传智播客, CSDN]
    CSDN
    [黑马程序员, 传智播客]

      由于Stack继承了Vector,因它也是一个非常古老的Java集合类,它是线程安全的,性能比较

    差,所以现在的程序中一般较少使用Stack类。如果程序需要使用“栈”这种数据结构,则可以考虑使

    用LinkedList。

  • 相关阅读:
    10个你可能不知道的JavaScript小技巧
    JS实现rgb与16进制颜色相互转换
    JavaScript 计算两个颜色叠加值
    软件测试定义和目的(1)
    服务器查看系统日记
    SQL Server 2012 安装成功后找不到SQL server Management
    windowns 10 安装 win64_11gR2_database
    C#获得当前目录和执行目录及执行文件的路径
    卸载yaml,重新安装的坑
    IIS的卸载和安装
  • 原文地址:https://www.cnblogs.com/xiongxuesong/p/4567383.html
Copyright © 2011-2022 走看看