Java学习日志(五): 集合的数据结构,List集合(List接口,LinkedList)

JavaEE学习日志持续更新----> 必看!JavaEE学习路线(文章总汇)

集合的数据结构

特点:先进后出
在这里插入图片描述

队列

特点:先进先出
在这里插入图片描述

数组

特点:查询快,增删慢
在这里插入图片描述

链表

特点:查询慢,增删快
在这里插入图片描述

红黑树

特点:查询速度非常快
在这里插入图片描述

List集合

List接口

java.util.List接口 extends Collection接口

List接口的特点:

  1. 有序集合。 存储元素和取出元素的顺序时一致的,存储:123,取出:123。
  2. 有索引,包含了一些带索引的特有方法。
  3. 允许存储重复元素

带索引的方法:

  • void add​(int index, E element) 将指定元素插入此列表中的指定位置(可选操作)。
  • E get​(int index) 返回此列表中指定位置的元素。
  • E remove​(int index) 删除此列表中指定位置的元素(可选操作)。
  • E set​(int index, E element) 用指定的元素替换此列表中指定位置的元素(可选操作)。
public class Demo01 {
    public static void main(String[] args) {
        //创建一个List集合对象
        List<String> list = new ArrayList<>();
        //往集合中添加元素
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("a");
        System.out.println(list);//[a, b, c, d, a]

        //void add​(int index, E element) 将指定元素插入此列表中的指定位置(可选操作)。
        //在c和d之间添加w
        list.add(3,"w");
        System.out.println(list);//[a, b, c, w, d, a]
        //E get​(int index) 返回此列表中指定位置的元素。
        System.out.println(list.get(0));//a
        System.out.println(list.get(4));//d
        //E remove​(int index) 删除此列表中指定位置的元素(可选操作)。
        //把d后边的a删除
        String s1 = list.remove(5);
        System.out.println("被移除的元素:"+s1);//被移除的元素:a
        System.out.println(list);//[a, b, c, w, d]
        //E set​(int index, E element) 用指定的元素替换此列表中指定位置的元素(可选操作)。
        //把w替换为小猫
        String s2 = list.set(3, "小猫");
        System.out.println("被替换的元素:"+s2);//被替换的元素:w
        System.out.println(list);//[a, b, c, 小猫, d]
        }
 }

注意:使用带索引的方法,一定不要超出索引的使用范围,否则就会抛出索引越界异常。

  1. IndexOutOfBoundsException 索引越界异常,一般集合会抛出
  2. ArrayIndexOutOfBoundsException 数组索引越界异常
  3. StringIndexOutOfBoundsException 字符串索引越界异常

三种遍历的方法:

  1. 普通for循环遍历
for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}
  1. 迭代器遍历
Iterator<String> it = list.iterator();
while (it.hasNext()){
    String s = it.next();
    System.out.println(s);
}
  1. 增强for循环遍历
for (String s : list) {
    System.out.println(s);
}

ArrayList集合

List接口的可调整大小的阵列实现。
请注意,此实现不同步。(多线程)
特点

  1. 实现了List接口,数组大小可根据元素的增加或删除调整大小。
  2. 底层实现为数组,查询快,增删慢**
  3. 此实现不同步(多线程)

Vector集合

特点:

  1. 实现List接口,可增长的对象数组。
  2. 底层实现为数组,查询快,增删慢**
  3. 同步的 (单线程)

从Java 2平台v1.2开始,该类被改进以实现List接口,使其成为Java
Collections Framework的成员。
与新的集合实现不同, Vector是同步的。
如果不需要线程安全实现,建议使用ArrayList代替Vector

LinkedList集合

java.util.LinkedList
特点:

  1. 实现了List接口
  2. 底层是一个双向链表结构:查询慢,增删快
  3. LinkedList集合中包含了一些操作首尾元素的方法

操作首尾元素的方法

  1. 添加首尾元素
  • public void addFirst(E e) 将指定元素插入此列表的开头。
  • public void addLast(E e) 将指定元素添加到此列表的结尾。等效于add()方法
  • public void push(E e) 将元素推入此列表所表示的堆栈。等效于addFirst()方法
private static void show01() {
    //创建LinkedList集合对象
    LinkedList<String> linked = new LinkedList<>();
    //往集合中添加元素
    linked.add("aaa");
    linked.add("bbb");
    linked.add("ccc");
    linked.add("ddd");
    linked.add("aaa");
    System.out.println(linked);//[aaa, bbb, ccc, ddd, aaa]

    //public void addFirst(E e) :将指定元素插入此列表的开头。
    //public void push(E e) :将元素推入此列表所表示的堆栈。等效于addFirst()方法
    //linked.addFirst("www");
    linked.push("www");
    System.out.println(linked);//[www, aaa, bbb, ccc, ddd, aaa]
    //public void addLast(E e) :将指定元素添加到此列表的结尾。等效于add()方法
    linked.addLast("com");
    //linked.add("com");
    System.out.println(linked);//[www, aaa, bbb, ccc, ddd, aaa, com]
}
  1. 获取首尾元素
  • public E getFirst() 返回此列表的第一个元素。
  • public E getLast() 返回此列表的后一个元素。
private static void show02() {
    //创建LinkedList集合对象
    LinkedList<String> linked = new LinkedList<>();
    //往集合中添加元素
    linked.add("aaa");
    linked.add("bbb");
    linked.add("ccc");
    linked.add("ddd");

    //linked.clear();//如果集合中没有元素,NoSuchElementException
    //防止程序抛出异常
    if(!linked.isEmpty()) {
        String first = linked.getFirst();
        System.out.println(first);//aaa

        String last = linked.getLast();
        System.out.println(last);//ddd
    }
}
  1. 移除首尾元素
  • public E removeFirst() 移除并返回此列表的第一个元素。
  • public E removeLast() 移除并返回此列表的后一个元素。
  • public E pop() 从此列表所表示的堆栈处弹出一个元素。等效于removeFirst()方法
private static void show03() {
    //创建LinkedList集合对象
    LinkedList<String> linked = new LinkedList<>();
    //往集合中添加元素
    linked.add("aaa");
    linked.add("bbb");
    linked.add("ccc");
    linked.add("ddd");
    System.out.println(linked);//[aaa, bbb, ccc, ddd]

    //linked.clear();

    //String first = linked.removeFirst();
    String pop = linked.pop();
    System.out.println(pop);//aaa

    String last = linked.removeLast();
    System.out.println(last);//ddd

    System.out.println(linked);//[bbb, ccc]
}
发布了14 篇原创文章 · 获赞 15 · 访问量 1624

猜你喜欢

转载自blog.csdn.net/Sakuraaaaaaa/article/details/104143964