【Java】List接口与实现类

这篇博客详细介绍了Java中的List接口,包括其特点和常用方法。重点讲解了ArrayList、Vector和LinkedList三个实现类,分析了它们的特点、示例及源码。文章通过比较ArrayList和LinkedList的区别,强调了数组和链表结构在查询和增删操作上的性能差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、List接口

1.特点:

2.方法:

二、List接口的使用

三、List实现类

1.ArrayList(重点)

(1)特点

(2)示例

(3)源码分析

2.Vector

(1)特点

(2)示例

3.LinkedList

(1)特点

(2)示例

四、ArrayList和LinkedList的区别

1.ArrayList     数组

2.LinkedList    双向链表


一、List接口

1.特点:

有序、有下标、元素可以重复。

2.方法:

1.在index位置插入对象o

void add(int index,Object o)

2. 将一个集合中的元素添加到此集合中的index位置

boolean addAll(int index,Collection c)

3. 返回集合中指定位置的元素

Object get(int index)

4. 返回fromIndex和toIndex之间的集合元素

List subList(int fromIndex,int toIndex)

二、List接口的使用

详见代码注解:

重点都在注释      重点都在注释      重点都在注释      

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**
 * List子接口使用
 * 特点:1.有序 有下标
 * 特点:2.可以重复
 */
public class Test03 {
    public static void main(String[] args) {
        //1.先创建集合对象
        List list = new ArrayList<>();
        //添加元素
        list.add("苹果");
        list.add("葡萄");
        list.add(20);
        list.add(46);
        list.add(56);
        list.add("香蕉");
        list.add("橘子");
        list.add(1, "梨子");
        System.out.println("元素个数:" + list.size());
        System.out.println(list.toString());
        System.out.println("----------------");

        //2.删除元素(字符串)
        list.remove(1);
        System.out.println("删除之后的个数:" + list.size());
        System.out.println(list.toString());
        System.out.println("----------------");

        //删除数字
        // 直接删除角标
        list.remove(2);
        System.out.println(list.toString());
        System.out.println("----------------");

        //转为Object
        list.remove((Object) 46);
        System.out.println(list.toString());
        System.out.println("----------------");
        //new Integer
        list.remove(new Integer(56));
        System.out.println(list.toString());
        System.out.println("----------------");

        //3.遍历
        //(1)有角标,可以使用for循环遍历
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("----------------");

        //(2)使用增强for
        for (Object objiect : list) {
            System.out.println(objiect);
        }
        System.out.println("----------------");

        //(3)使用迭代器  只能往后遍历
        Iterator it = list.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
        System.out.println("----------------");

        //(4)列表迭代器     可以逆向遍历,任意方向,添加、删除、修改元素
        ListIterator lit = list.listIterator();
        while (lit.hasNext()) {
            System.out.println(lit.nextIndex() + ":" + lit.next());  //从前往后遍历
        }
        System.out.println("----------------");
        while (lit.hasPrevious()) {
            System.out.println(lit.previousIndex() + ":" + lit.previous());  //从后往前遍历
        }
        System.out.println("----------------");

        //4.判断
        System.out.println(list.contains("苹果"));
        System.out.println(list.isEmpty());
        System.out.println("----------------");

        //5.获取位置
        System.out.println(list.indexOf("葡萄"));
        System.out.println("----------------");

        //6.返回子集合  subList
        List list1 = list.subList(1,3);   //包含角标1的元素,不包含角标3的元素
        System.out.println(list1.toString());
    }
}

三、List实现类

1.ArrayList(重点)

(1)特点

数组结构实现,查询快、增删慢

运行效率快,线程不安全

(2)示例

详见代码注解:

重点都在注释      重点都在注释      重点都在注释      

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 


import com.scaaner.Student;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

/**
 * ArrayList的使用
 * 存储结构:数组    查找遍历快   增删慢  比较
 */
public class Test01 {
    public static void main(String[] args) {
        //创建集合
        ArrayList arraylist = new ArrayList<>();
        //1.添加元素
        Student s1 = new Student("A",20);
        Student s2 = new Student("B",22);
        Student s3 = new Student("C",24);
        Student s4 = new Student("D",27);
        arraylist.add(new Student("A",20));
        arraylist.add(s2);
        arraylist.add(s3);
        arraylist.add(s4);
        System.out.println("元素个数:"+arraylist.size());
        System.out.println(arraylist.toString());
        System.out.println("------------------------------");
        //2.删除元素
        arraylist.remove(s1);
        System.out.println("删除之后个数:"+arraylist.size());
        System.out.println(arraylist.toString());
        System.out.println("------------------------------");
        //3.遍历元素
        //(1)迭代器
        Iterator iterator = arraylist.iterator();
        while(iterator.hasNext()){
            Student s = (Student) iterator.next();
            System.out.println(s.toString());
        }
        System.out.println("------------------------------");
        //(2)列表迭代器
        ListIterator listIterator = arraylist.listIterator();
        while(listIterator.hasNext()){
            Student student = (Student) listIterator.next();
            System.out.println(student.toString());
        }
        System.out.println("------------------------------");
        while(listIterator.hasPrevious()){
            Student student1 = (Student) listIterator.previous();
            System.out.println(student1.toString());
        }
        //4.判断
        System.out.println(arraylist.contains(new Student("A",20)));
        System.out.println(arraylist.isEmpty());
        System.out.println("------------------------------");
        //5.查找
        System.out.println(arraylist.indexOf(s2));
    }
}

用equals判断两元素是否相等:↓↓↓

(3)源码分析

向集合添加元素后,默认容量:DEFAULT_CAPACITY = 10;如果没有添加任何元素,容量为0。

每次扩容的大小是原来的1.5倍。

存放元素的数组:elementData

实际元素个数:size

添加元素:add()

2.Vector

(1)特点

数组结构实现,查询快、增删慢

运行效率慢,线程安全

可实现可增长的对象数组

(2)示例

详见代码注解:

重点都在注释      重点都在注释      重点都在注释      

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 

import java.util.Enumeration;
import java.util.Vector;

/**
 * Vector集合的使用
 * 存储结构:数组
 */
public class Test02 {
    public static void main(String[] args) {
        //创建集合
        Vector vector = new Vector<>();
        //1.添加元素
        vector.add("菠萝");
        vector.add("橘子");
        vector.add("糯叽叽");
        vector.add("芒果");
        System.out.println(vector.toString());
        System.out.println("-------------------");
        //2.删除
        vector.remove(1);
        //vector.clear();       //清空
        System.out.println(vector.toString());
        System.out.println("-------------------");
        //3.遍历
        //可以使用for循环,增强for循环,迭代器
        //使用枚举器
        Enumeration elements = vector.elements();
        while(elements.hasMoreElements()){
            String s =(String) elements.nextElement();
            System.out.println(s);
        }
        System.out.println("-------------------");
        //4.判断
        System.out.println(vector.contains("苹果"));
        System.out.println(vector.isEmpty());
        System.out.println("-------------------");
        //5.其他方法
        System.out.println(vector.firstElement());   //枚举第一个元素
        System.out.println(vector.lastElement());   //枚举最后一个元素
    }
}

3.LinkedList

(1)特点

链表结构实现(双向链表),查询慢、增删快

(2)示例

详见代码注解:

重点都在注释      重点都在注释      重点都在注释      

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 

import com.scaaner.Student;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;

/**
 * LinkedList的使用
 * 存储结构:双向链表
 */
public class Test01 {
    public static void main(String[] args) {
        //创建集合
        LinkedList linkedList = new LinkedList<>();
        //1.添加元素
        Student s1 = new Student("A",20);
        Student s2 = new Student("B",22);
        Student s3 = new Student("C",24);
        Student s4 = new Student("D",27);
        linkedList.add(s1);
        linkedList.add(s2);
        linkedList.add(s3);
        linkedList.add(s4);
        System.out.println("元素个数:"+linkedList.size());
        System.out.println(linkedList.toString());
        System.out.println("-----------------------");
        //2.删除   remove     清空 clear
        //3.遍历
        //(1)for
        for (int i = 0; i <linkedList.size(); i++) {
            System.out.println(linkedList.get(i));
        }
        System.out.println("-----------------------");
        //(2)增强for循环
        for (Object object : linkedList){
            Student s = (Student) object;
            System.out.println(s.toString());
        }
        System.out.println("-----------------------");
        //(3)使用迭代器
        Iterator iterator =linkedList.iterator();
        while(iterator.hasNext()){
            Student s = (Student) iterator.next();
            System.out.println(s.toString());
        }
        System.out.println("-----------------------");
        //(4)使用列表迭代器
        ListIterator listIterator =linkedList.listIterator();
        while(iterator.hasNext()){
            Student s = (Student) listIterator.next();
            System.out.println(s.toString());
        }
        System.out.println("-----------------------");
        //4.判断    contains(是否存在)    isEmpty(是否为空)
        //5.获取某元素的位置     indexOf()
        }
}

四、ArrayList和LinkedList的区别

1.ArrayList     数组

 必须开辟连续空间,查询快,增删慢。

2.LinkedList    双向链表

无需开辟连续空间,查询慢,增删快。


简单粗暴!

感谢ლ(°◕‵ƹ′◕ლ)!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yao_yao_ya

感谢打赏ლ(°◕‵ƹ′◕ლ)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值