Java中的List集合框架

系列文章目录

Java中的Set集合框架
Java中的Map集合框架


前言

本文介绍了Java中常用的集合框架ArrayList和LinkedList,本文为系列文章,接下来还会介绍Set和Map,如果喜欢的话,可以点赞,收藏,关注。

一、Java中的集合框架

1.为什么使用集合框架

在这里插入图片描述

2.集合框架的继承关系(简略)

ArrayList
List
LinkedList
HashSet
Set
TreeSet
Collection
HashMap
Map
TreeMap

List是可重复且有序的,Set是不可重复且无序的

二、List

1.List类型的特点

Java中的List是一种接口类型,它定义了一种有序的集合数据结构。List中的元素按照插入的顺序存储,并且可以通过索引来访问元素。以下是List类型的主要特点:

  1. 有序集合:List中的元素按照插入的顺序进行排序,因此元素的顺序是有意义的。可以通过索引来访问元素,索引从0开始。
  2. 可以包含重复元素:List允许包含重复元素,即多个元素可以具有相同的值。
  3. 动态性:List是动态的,可以在运行时添加、删除或修改元素。这使得List非常灵活,可以适应程序运行时的变化需求。
  4. 易于使用:List提供了一组简单而强大的方法来操作数据,例如add、get、remove等。这使得开发人员可以轻松地使用List来处理数据。
  5. 可扩展性:List接口具有良好的扩展性,可以通过实现List接口来创建自己的List实现。这使得List可以根据需求进行扩展和定制,以满足特定的应用程序需求。

2.ArrayList案例和LinkedList案例

ArrayList:

public class ArrayListTest {
    public static void main(String[] args) {
        //声明的时候最好采用多态的形式,也就是以父接口的形式去声明
        //增加元素
        List list=new ArrayList();
        list.add("西瓜");
        list.add("苹果");
        list.add("草莓");
        list.add("西瓜");
        //修改元素
        list.set(1,"面包");//下标从0开始,此处将‘苹果’修改成了‘面包’
        //删除元素
        list.remove(1);//remove可以直接通过对象删除,也可以通过下标删除
        //查询元素
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}

LinkedList:

public class LinkedListTest {

    public static void main(String[] args) {
        List list=new LinkedList();
        list.add("西瓜");
        list.add("苹果");
        list.add("草莓");
        list.add("西瓜");
        //修改元素
        list.set(1,"面包");
        //删除元素
        list.remove(1);
        //查询元素
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}

3.ArrayList底层原理和LinkedList底层原理

  • ArrayList底层是由数组实现的

    其默认初始化容量为10

    在这里插入图片描述

    将elementData这个存储ArrayList元素的数组作为缓冲区
    在这里插入图片描述

    通过ensureCapacity()方法进行动态扩容

    [

  • LinkedList底层是由双向链表实现的

    在这里插入图片描述

    其初始化时不需要申请内存空间

4.ArrayList和LinkedList如何选择

ArrayList可以根据索引直接访问元素,因此可以快速随机访问元素。在添加或删除元素时,需要移动后面的所有元素,因此这种操作的效率较低。如果需要高效的随机访问元素,并且添加或删除元素的频率较低,那么应该选择ArrayList。

LinkedList无法进行随机访问元素,但是添加或删除元素时只需要修改指针,因此它的效率相对较高。如果需要高效的添加或删除元素,并且对访问元素的顺序并没有特别的要求,那么应该选择LinkedList。

在开发时,主要的业务场景是追加和遍历,所以使用ArrayList的频率更高。

5.List存放复杂的数据类型

先定义一个Dog复杂数据类型

public class Dog {
    private String name;
    private String type;
	//此处忽略了全参数构造方法和get,set方法
    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", type='" + type + '\'' +
                '}';
    }
    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Dog dog = (Dog) o;
        return Objects.equals(name, dog.name) && Objects.equals(type, dog.type);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, type);
    }
}

将其存入ArrayList中

public class ArrayListTest {
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add(new Dog("a","a"));
        list.add(new Dog("b","b"));
        list.add(new Dog("c","c"));
        System.out.println("共有"+list.size()+"条狗");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        //判断list中是否包含某个对象,或者移除对象都需要重写equals方法
        System.out.println(list.contains(new Dog("a", "a")));
        System.out.println(list.remove(new Dog("a", "a")));
    }
}

contain包含,remove移除,传入的对象都需要重写equals()方法,否则操作失败返回false

6.LinkedList独有的方法

因为LinkedList是链表实现,所以有一些方法针对其实现

方法名说明
void addFirst(Object o)在列表首部添加元素
void addLast(Object o)在列表尾部添加元素
Object getFirst()返回列表的第一个元素
Object getLast()返回列表的最后一个元素
Object removeFirst()删除并返回列表中的第一个元素
Object removeLast()删除并返回列表中的最后一个元素

总结

  Java中的集合框架是一个强大的工具,为Java应用程序提供了灵活且高效的方式来存储、操作和访问数据。它提供了一组接口和实现类,可以处理各种常见的数据结构,如列表、集合和映射等。
  集合框架的出现对Java开发产生了深远的影响。在早期的Java版本中,程序员需要手动实现各种数据结构,这既复杂又容易出错。而集合框架的出现提供了一种统一的方式来进行数据操作,大大简化了代码的编写和维护。
  同时还提高了代码的可读性和可维护性。通过使用标准的接口和类,开发者可以更容易地理解彼此的代码,同时也方便了代码的复用和扩展。
  它的出现也解决了早期Java语言的一些问题。例如,早期版本的数据结构和集合类库存在诸多问题,如缺乏统一接口、难以扩展和难以维护等。而集合框架的出现提供了一种更为高效和灵活的方式来处理数据集合。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

笑的像个child

好人一生平安,先磕为敬

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

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

打赏作者

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

抵扣说明:

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

余额充值