【List集合常用子类】ArrayList和LinkedList

文章介绍了Java中的List集合子类ArrayList和LinkedList,包括它们的底层数据结构和特性。ArrayList基于数组,查询速度快,增删慢;LinkedList基于链表,查询慢,增删快。示例展示了如何使用它们存储字符串并遍历,以及ArrayList的扩容机制。此外,文章还讨论了LinkedList的特有方法如addFirst和addLast,并指出其适用于设计队列和栈的场景。
摘要由CSDN通过智能技术生成

List集合子类

List集合常用子类:ArrayList、LinkedList,使用时都需要导包

  • ArrayList:底层数据结构是数组,查询快,增删慢
  • LinkedList:底层数据结构是链表,查询慢,增删快

1.分别使用ArrayList和LinkedList完成存储字符串并遍历

package com.gather.list;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
public class ListDemo05 {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList<String> array=new ArrayList<String>();
        array.add("hello");
        array.add("world");
        array.add("java");
        //遍历
        //增强for循环
        for(String s:array){
            System.out.println(s);
        }
        System.out.println("========================");
        LinkedList<String> linkedList=new LinkedList<String>();
        linkedList.add("hello");
        linkedList.add("world");
        linkedList.add("java");
        for (String s:linkedList){
            System.out.println(s);
        }
    }
}

2.案例:ArrayList集合存储学生对象使用三种方式遍历

package com.gather.list.example;
import java.util.ArrayList;
import java.util.Iterator;
public class ListDemo03 {
    public static void main(String[] args) {
        ArrayList<Student> array = new ArrayList<Student>();
        Student s1 = new Student("郝佳乐", 20);
        Student s2 = new Student("张三", 18);
        Student s3 = new Student("李四", 22);
        array.add(s1);
        array.add(s2);
        array.add(s3);
        //迭代器方式遍历
        Iterator<Student> it = array.iterator();
        while (it.hasNext()) {
            Student s = it.next();
            System.out.println(s.getName() + "," + s.getAge());
        }
        System.out.println("=====================");
        //普通for的方式
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            System.out.println(s.getName() + "," + s.getAge());

        }
        System.out.println("======================");
        //增强for的方式
        for (Student s:array){
            System.out.println(s.getName() + "," + s.getAge());
        }
    }
}

ArrayList源码分析如下:

1、空参构造创建对象时,底层会创建一个名为elementData的数组,长度为0
2、添加第一个元素时,底层会经过一系列的判断,调用grow方法完成第一次扩容,将数组elementData长度扩容为10
3、当10个元素存满了,底层会经过一系列的判断,再次调用grow方法完成扩容,将数组elementData长度扩容为旧容量的1.5
4、如果一次存多个元素,扩容1.5倍也存不下,则数组elementData的扩容以实际为准

3.LinkedList集合的特有功能

  • public void addFirst(E e):在该列表开头插入指定的元素

  • public void addLast(E e):将指定的元素追加到此列表的末尾

    package com.gather.list;
    import java.util.LinkedList;
    //LinkedList特有功能
    public class ListDemo06 {
        public static void main(String[] args) {
            LinkedList<String> linkedList=new LinkedList<String>();
            linkedList.add("hello");
            linkedList.add("world");
            linkedList.add("java");
            linkedList.addFirst("javaee");
            linkedList.addLast("javase");
            System.out.println(linkedList);
        }
    }
    
  • public E getFirst():返回此列表中的第一个元素

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

    package com.gather.list;
    import java.util.LinkedList;
    public class ListDemo06 {
        public static void main(String[] args) {
            LinkedList<String> linkedList=new LinkedList<String>();
            linkedList.add("hello");
            linkedList.add("world");
            linkedList.add("java");
            System.out.println(linkedList.getFirst());
            System.out.println(linkedList.getLast());
            System.out.println(linkedList);
        }
    }
    
  • public E removeFirst():从此列表中删除并返回第一个元素

  • public E removeLast():从此列表中删除并返回最后一个元素

    package com.gather.list;
    import java.util.LinkedList;
    public class ListDemo06 {
        public static void main(String[] args) {
            LinkedList<String> linkedList=new LinkedList<String>();
            linkedList.add("hello");
            linkedList.add("world");
            linkedList.add("java");
            System.out.println(linkedList.removeFirst());
            System.out.println(linkedList.removeLast());
            System.out.println(linkedList);
        }
    }
    

4.LinkedList集合的应用场景

  • 设计队列

    队列:两端开口,特点是先进先出(排队)
    从队列后端入队列:addLast方法
    从队列前端出队列:removeFirst方法

  • 设计栈

    栈:顶端开口的结构,特点是先进后出(弹匣)
    进栈/压栈:push方法(底层封装了addFirst方法)
    出栈/弹栈:pop方法底(底层封装了removeFirst方法)

public class Demo {
    public static void main(String[] args) {
        LinkedList<String> queue = new LinkedList<>();
        queue.addLast("第1位顾客");
        queue.addLast("第2位顾客");
        queue.addLast("第3位顾客");
        queue.addLast("第4位顾客");

        System.out.println(queue);
        System.out.println(queue.removeFirst());
        System.out.println(queue.removeFirst());
        System.out.println(queue);

        System.out.println("---------");
        LinkedList<String> stack = new LinkedList<>();
        stack.push("第1颗子弹");
        stack.push("第2颗子弹");
        stack.push("第3颗子弹");
        stack.push("第4颗子弹");
        
        System.out.println(stack);
        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack);
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值