JAVA基础之集合2

文章介绍了JAVA中List集合的特点,如有序、可重复,并对比了List与Set的区别。详细讲解了List的使用,包括of方法创建集合、remove方法及迭代器的使用,并通过示例说明了在迭代器遍历时进行集合修改可能导致的ConcurrentModificationException异常。接着,文章探讨了ArrayList的特性,如查询效率高、增删效率低,并展示了ArrayList的遍历方式和扩容机制。最后,文章提到了链表的基本概念,单链表和双链表的差异。

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

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

今天学习了集合的List集合、ArrayList集合、链表记录一下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、List集合

1.1、List集合和Set集合的区别

List集合和Set集合都是Collection类的接口。但是List集合和Set集合有着各自的优缺点。下面我就通过表格形式总结一下。

List集合Set集合
有序的无序的
可重复的去重的
可根据索引进行操作的不可根据索引进行操作的

1.2、List集合的使用

这是创建一个int类型的list集合。

List<Integer> list = new ArrayList<>();

在list集合中许多方法。记录几个常见的方法。

of方法:可以创建一个list集合。

//of方法
        System.out.println(List.of(1, 4, 6, 8, 10));
        System.out.println(list1);
        System.out.println("------------------------------");

注意:of创建的list集合不能修改

remove方法:删除list集合中的元素。如果list集合是int类型的那么输入1就删除下标为1的元素,而不是数字1

   //remove
        list.remove(1);

1.3、List迭代器

当使用list集合想遍历整个集合的元素,我们知道有三种方法:
1、for
2、foreach
3、迭代器
但只有使用for循环才能时候才能在某些条件下,对list集合做一些添加和删除操作。为什么foreach和迭代器不行呢?因为foreach和迭代器底层代码都是一样的都是通过迭代器实现。在迭代器使用的时候,会先遍历整个list集合给出一个数记录整个集合的元素个数,在进行添加后迭代器发现遍历的个数与之前记录的数不一致就会抛出

ConcurrentModificationException的异常。这个异常的意思就是当这种修改是不允许的时,检测到对象的并发修改的方法可能会抛出此异常。`

此时就有了List迭代器解决此问题。给出一实例代码供参考。
示例代码如下:


    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        list.add("钢铁侠");
        list.add("小蜘蛛");
        list.add("美队");
        list.add("黑寡妇");
        list.add("黑豹");
        list.add("灭霸");
       while (lis.hasNext()){
           if ("灭霸".equals(lis.next())){
               lis.add("惊奇队长");
           }
        }
        System.out.println(list);
        }
        

输出结果如下:在这里插入图片描述

二、ArrayList集合

ArrayList:有序的,可以根据索引进行操作的,可以存储重复数据,实现所有可选列表操作,并允许所有元素,包括null 。
优点:查询效率较高,增删效率较低。
遍历方式:常见的三种集合遍历方式+list迭代器
扩容机制:当ArrayList空间不够,可以进行扩容。扩容机制扩容到原来的1.5倍。

示例代码如下:

public class Class_07_ArrayList {
    public static void main(String[] args) {
        List<Phone> list = new ArrayList<>();
        Phone p = new Phone(1000, "Vivo", 99, 5000);
        Phone p2 = new Phone(1001, "华为Mate40Pro", 100, 6999);
        Phone p3 = new Phone(1003, "华为Mate40", 101, 5999);
        list.add(new Phone(1000, "Vivo", 99, 5000));
        list.add(new Phone(1001, "华为Mate40Pro", 100, 6999));
        list.add(new Phone(1003, "华为Mate40", 101, 5999));
        System.out.println(list.indexOf(new Phone(1001, "华为Mate40Pro", 100, 6999)));
        for (Phone e : list) {
            System.out.println(e);
        }
        System.out.println("===========================");

        System.out.println(list.size());
    }
}

class Phone {
    private int id;
    private String name;
    private int num;
    private double price;

    public Phone() {
    }

    public Phone(int id, String name, int num, double price) {
        this.id = id;
        this.name = name;
        this.num = num;
        this.price = price;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "phone{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", num=" + num +
                ", price=" + price +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Phone phone = (Phone) o;
        return id == phone.id && num == phone.num && Double.compare(phone.price, price) == 0 && Objects.equals(name, phone.name);
    }


}

输出结果如下:
在这里插入图片描述

三、链表

单链表:
单链表下一个没用地址指向null。
在这里插入图片描述
双链表:
双链表的头部可以指向尾部,形成闭环。
在这里插入图片描述

总结

今天学习了一些集合的不同类型,以及常用的方法,需要加强联系。明天再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值