List集合(包含LinkedList集合和Vector集合)

前文学习过Collection接口的使用,接下来学习Collection接口的子类,java.util.List和java.util.Map集合。

java.util.List接口继承extends自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合,在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。

List接口特点:

1.它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33.那么集合中,元素的存储就是按照11、22、33的顺序完成的。

2.它是一个带有索引的集合,通过索引就可以精确地操作集合中的元素(与数组的索引一个道理)。

3.集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。

tips:之前学习过List接口的子类java.util.ArrayList类,该类的方法都是来自List中定义。

List常用方法:

注意事项:操作索引的时候,一定要防止索引越界异常。(不要超出索引范围)

public void add(int index,E element):将指定的元素,添加到该集合中的指定位置上。

public E get(int index):返回集合中指定位置的元素。

public E remove(int index):移除列表中指定位置的元素,返回的是被移除的元素。

public E set(int index,E element):用指定元素替换集合中指定位置的元素,返回值是更新前的元素

public static void main(String[] args) {
    // 多态写法
    List<String> list = new ArrayList<>();
   // 按顺序添加元素
    list.add("aaa");
    list.add("bbb");
    list.add("ccc");
    // 打印集合
    System.out.println(list); // [aaa, bbb, ccc] 重写了toString方法

    // 按索引添加元素
    // public void add(int index,E element):将指定的元素,添加到该集合中的指定位置上。
    // 在bbb和ccc之间,添加ddd
    // 注意不是替换,是先将该索引位置的元素及后面的元素后移,而后插入
    list.add(2,"ddd");
    System.out.println(list); // [aaa, bbb, ddd, ccc]

    // public E remove(int index):移除列表中指定位置的元素,返回的是被移除的元素。
    // 移除ddd元素,注意,此处后续元素也是有前移动作
    String str = list.remove(2);
    System.out.println("被移除的元素:" + str); // 被移除的元素:ddd
    System.out.println(list); // [aaa, bbb, ccc]

    // public E set(int index,E element):
    // 用指定元素替换集合中指定位置的元素,返回值是更新前的元素。
    // 将aaa替换为AAA
    String str1 = list.set(0,"AAA");
    System.out.println("被替换的元素:" + str1); // 被替换的元素:aaa
    System.out.println(list); // [AAA, bbb, ccc]

    // public E get(int index):返回集合中指定位置的元素。
    // List集合遍历有三种方式
    // 1.普通的遍历
    System.out.println("普通for循环遍历");
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
    }
    // 2.for each遍历
    System.out.println("for each循环遍历");
    for (String str2 : list) {
        System.out.println(str2);
    }

    // 3.迭代器遍历
    System.out.println("迭代器遍历");
    Iterator<String> iterator = list.iterator();
    while(iterator.hasNext()){
        System.out.println(iterator.next());
    }
}

List子类(实现类)

1.ArrayList集合(前文已介绍),对应数据结构是:动态数组

集合ArrayList

ArrayList因为存储的地址连续,所以查询效率高,只需要提供索引,时间复杂度为O(1),但是增删需要移动数据,时间复杂度达到了O(n),当程序中需要大量地进行增删数据时,ArrayList数据结构不适合采用。

2.LinkedList

java.util.LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。

LinkedList是一个双向链表。

特点:

1.底层是一个链表结构:查询慢,增删快。

2.里边包含了大量操作首尾的方法。

注意:使用了LinkedList集合特有的方法,不能使用多态!

常用方法:

public void addFirst(E e):将指定元素添加到此列表的开头。

public void addLast(E e):将指定元素添加到此列表的结尾。

public E getFirst():返回此列表的第一个元素。

public E getLast():返回此列表的最后一个元素。

public E removeFirst():移除并返回此列表的第一个元素。

public E removeLast():移除并返回此列表的最后一个元素。

public E pop():从此列表所表示的堆栈处弹出一个元素。

public void push(E e):将元素推入此列表所表示的堆栈。

public boolean isEmpty():如果列表不包含元素,则返回true。

/*
public E removeFirst():移除并返回此列表的第一个元素。
public E removeLast():移除并返回此列表的最后一个元素。
public E pop():从此列表所表示的堆栈处弹出一个元素。
 */
private static void show03() {
    LinkedList<String> linkedList = new LinkedList<>();
    linkedList.add("aaa");
    linkedList.add("bbb");
    linkedList.add("ccc");

    // public E removeFirst():移除并返回此列表的第一个元素。
    String removeFirst = linkedList.removeFirst();
    System.out.println("被移除的第一个元素:" + removeFirst); // 被移除的第一个元素:aaa
    System.out.println(linkedList); // [bbb, ccc]

    // public E removeLast():移除并返回此列表的最后一个元素。
    String removeLast = linkedList.removeLast();
    System.out.println("被移除的最后一个元素:" + removeLast); // 被移除的最后一个元素:ccc
    System.out.println(linkedList); // [bbb]

    // public E pop():从此列表所表示的堆栈处弹出一个元素。
    // 此方法相当于removeFirst方法
    String pop = linkedList.pop();
    System.out.println("从栈顶弹出的元素:" + pop); // bbb
    System.out.println(linkedList); //
}

// public E getFirst():返回此列表的第一个元素。
// public E getLast():返回此列表的最后一个元素。
private static void show02() {
    LinkedList<String> linkedList = new LinkedList<>();
    linkedList.add("aaa");
    linkedList.add("bbb");
    linkedList.add("ccc");
    if(!linkedList.isEmpty()) {
        String first = linkedList.getFirst();
        String last = linkedList.getLast();
        System.out.println("第一个元素:" + first); // aaa
        System.out.println("最后一个元素:" + last); // cc
    }
    // 清空
    linkedList.clear();
    System.out.println(linkedList.size()); // 0
}

/*
public void addFirst(E e):将指定元素添加到此列表的开头。
public void addLast(E e):将指定元素添加到此列表的结尾。
public void push(E e):将元素推入此列表所表示的堆栈。
 */
private static void show01() {
    // 创建LinkedList集合对象,不能使用多态
    LinkedList<String> linkedList = new LinkedList<>();
    // 使用add方法往集合中添加元素
    linkedList.add("aaa");
    linkedList.add("bbb");
    linkedList.add("ccc");
    // 使用addFirst方法往集合开头添加元素
    linkedList.addFirst("AAA");
    System.out.println(linkedList); // [AAA, aaa, bbb, ccc]

    // public void push(E e):将元素推入此列表所表示的堆栈。
    // 等效于addFirst方法
    linkedList.push("111");
    System.out.println(linkedList); // [111, AAA, aaa, bbb, ccc]

    // public void addLast(E e):将指定元素添加到此列表的结尾。
    // 此方法等效于add方法
    linkedList.addLast("DDD");
    System.out.println(linkedList); // [111, AAA, aaa, bbb, ccc, DDD]
}

Vector类可以实现可增长的对象数组(底层和ArrayList一样是动态数组),Vector是同步的(单线程的),速度慢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值