一.List集合

1.List用法:

  • List是用于有序存储可重复元素的集合。List包括List接口以及List接口的所有实现类,因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法。
  • 它是声明有序存储对象(可重复)功能的公共接口。List集合中只能存储引用数据类型,不能存储基本数据类型。
  • 在Java中,List接口是一个有序的集合,它允许我们按顺序存储和访问元素。它扩展了集合接口。

2.List集合中常用的的方法有:

  • add(Object element) - 向列表末尾追加一个对象
  • void add(int index,Object element),在指定位置index上插入元素element。
  • addAll() - 将一个列表的所有元素添加到另一个
  • get() - 有助于从列表中随机访问元素
  • iterator() - 返回迭代器对象,该对象可用于顺序访问列表的元素
  • set() - 更改列表的元素
  • remove() - 从列表中删除一个元素
  • removeAll() - 从列表中删除所有元素
  • clear() - 从列表中删除所有元素(比removeAll()效率更高)
  • size() - 返回列表的长度
  • toArray() - 将列表转换为数组
  • contains() -  如果列表包含指定的元素,则返回true

3.List集合的实现类有ArrayList 和LinkedList.

在使用List集合时,通常情况下声明为List类型,实例化时根据实际情况的需要,实例化为ArrayList或LinkedList.例如:

List<String> l = new ArrayList<String>();        // 利用ArrayList类实例化List集合
 List<String> l2 = new LinkedList<String>();     // 利用LinkedList类实例化List集合

 List接口的常用举例:

class Example1{
    public static void main(String[] args) {
        String a = "A", b = "B", c = "C", d = "D", e = "E";
        List<String> list = new LinkedList<String>();
        list.add(a);
        list.add(e);
        list.add(d);
        list.set(1, b);    // 将索引位置为1的对象e修改为对象b
        list.add(2, c);         // 将对象c添加到索引位置为2的位置
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

在控制台将输出如下信息:

A
B
C
D

 二.ArrayList类

ArrayList是一个可以处理变长数组的类型,它是一个泛型类,可以存放任意类型的对象。顾名思义,ArrayList是一个数组列表,因此其内部是使用一个数组来存放对象的。

1.ArrayList类常用的方法:

  • add()
  • get()
  • remove() 
  • clear() 
  • sort()
  • toArray() 
  • toString()等。

2. 利用ArrayList实现了List接口,ArrayList可以使用List接口常用方法。 

class Example2{
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add("a");
        arrayList.add("b");
        arrayList.add("c");
        System.out.println("arrayList的元素为:"+arrayList);
        arrayList.set(0,"c");   //将索引为0的位置对象a修改为对象c
        System.out.println("arrayList的元素为"+arrayList);
        arrayList.add(1,"e");   //将对象e添加到索引为1的位置
        System.out.print("arrayList的元素为:");
        for (int i=0;i<arrayList.size();i++){
            System.out.print(arrayList.get(i));//for循环迭代arrayList集合元素
        }
        System.out.println("");
        System.out.println("arrayList指定元素c位置的索引为"+arrayList.indexOf("c"));
        //返回列表中指定元素c位置的索引
        System.out.println("arrayList指定元素c最后位置的索引为"+arrayList.lastIndexOf("c")); 
          //返回列表中指定元素c最后位置的索引
        System.out.println("arrayList的指定区域为"+arrayList.subList(1,2));
        //返回列表中指返回一个指定区域的List集合对象[1,2)
    }
}

编译和运行后的结果为:

arrayList的元素为:[a, b, c]
arrayList的元素为 :[c, b, c]
arrayList的元素为:   cebc
arrayList指定元素 c位置的索引为 0
arrayList指定元素c最后位置的索引为 3
arrayList的指定区域为  [e]

3 .LinkedList类

  • LinkedList在实现中采用链表数据结构,相比于ArrayList,LinkedList访问速度较慢,但插入和删除熟读块,主要原因在于插入和删除元素时,只需要修改相应的链接位置,不需要移动大量的元素。
  • LinkedList 可以看成一个双链表,所有的操作都可以认为是一个双链表的操作,因为它实现了Deque接口和List接口。

1.  LinkedList类的常用方法举例

public class Example3 {
    public static void main(String[] args) {

        LinkedList linkedList = new LinkedList();
        linkedList.add("a");
        linkedList.add("b");
        linkedList.add("c");
        linkedList.add("d");
        //获得并输入列表开头的对象
        System.out.println("列表开头元素为:"+linkedList.getFirst()+"列表结尾元素为:"+linkedList.getLast());

        linkedList.addFirst("rr");    //向列表开头添加一个对象
        System.out.println("列表中所有元素:"+linkedList);
        linkedList.removeLast();//移除列表结尾元素
        System.out.println("列表结尾元素为:"+linkedList.getLast());
         //获取并输出列表结尾的对象
    }
}

 编译和运行后的结果为:

列表开头元素为:a列表结尾元素为:d
列表中所有元素:[rr, a, b, c, d]
列表结尾元素为:c