家人们谁懂啊!Java 里的集合简直是新手的 “大型迷宫”,每次写代码碰到ArrayListLinkedList,都像在玩 “找不同”,分不清谁快谁慢、谁该用在哪。今天咱们先从 List 接口唠起,把这个 “排队神器” 扒得明明白白,看完保证你再也不被它们搞心态!


一、集合是什么?Java 里的 “万能收纳盒”

集合,说白了就是 Java 里的万能收纳盒,用来存储数量不等的对象,比数组灵活多了 —— 数组长度固定,集合能自动扩容,还自带各种增删改查的方法,开发里写代码天天用。

  • 集合的相关接口和类,都在java.util包里,咱们主要从四个点学:集合接口的特点、核心方法、实现类、遍历方式。

二、Collection 接口:所有集合的 “老祖宗”

Collection接口是所有单列集合的父接口,堪称集合界的 “老祖宗”,它的子接口主要有两个:ListSet

  • 核心方法开发高频用,给你划重点:
    • add(Object o):把对象加到集合里,相当于 “往收纳盒里塞东西”。
    • contains(Object o):判断集合里有没有这个对象,相当于 “找收纳盒里有没有这个东西”。
    • remove(Object o):把对象从集合里删掉,相当于 “把东西从收纳盒里拿出来扔掉”。
    • size():获取集合里元素的个数,相当于 “数收纳盒里有多少东西”。

三、List 接口:有序可重复的 “排队神器”

List接口是Collection的子接口,堪称 Java 里的排队神器,特点超明显:

  • 有序:元素按添加顺序排列,有下标,就像排队一样,先来的在前,后来的在后。
  • 可重复:允许元素重复,就像排队可以有人插队(重复)。
  • 下标范围:0 ~ size()-1,和数组一样。

1. List 接口的核心方法,开发必背

除了继承父接口的方法,List 还有自己的 “专属技能”:

  • add(int index, Object o):把元素插到指定下标位置,相当于 “插队”。
  • get(int index):根据下标拿元素,相当于 “按排队号找人”。
  • remove(int index):删除指定下标的元素,相当于 “把指定位置的人移出队伍”,返回被删掉的元素。
  • set(int index, Object o):修改指定下标的元素,相当于 “把队伍里的人换掉”,返回被修改之前的元素。

2. List 的三大实现类,面试必背区别!

List 接口有三个常用实现类:ArrayListVectorLinkedList,它们的底层实现不一样,用法场景也完全不同,给你唠明白:

(1)ArrayList:底层数组实现的 “排队快取神器”

ArrayList是开发里最常用的 List 实现类,底层是数组实现的,特点:

  • 查询快、增删慢:就像排队,按号找人(查询)一秒到位,但要在中间插人、删人(增删),后面的人都得挪位置,效率低。
  • JDK2.0 版本,线程不安全,运行效率高。
  • 扩容机制:JDK1.7 版本创建对象时,不会直接分配数组空间,第一次add元素时才分配,初始长度 10,每次扩容 1.5 倍。
(2)Vector:ArrayList 的 “老大哥”,线程安全但慢

VectorArrayList底层一样是数组,但它是 JDK1.0 版本的老古董:

  • 线程安全,但效率低,就像排队时每操作一步都要锁门,别人不能动,虽然安全但慢得要死。
  • 现在开发里基本不用了,除非是老项目维护。
(3)LinkedList:底层链表实现的 “排队增删神器”

LinkedList底层是双向链表实现的,特点和 ArrayList 正好相反:

  • 查询慢、增删快:就像排队,按号找人得从头数(查询慢),但要在中间插人、删人,只需要改一下前后人的 “手拉手”,效率超高。
  • 线程不安全,运行效率高。
面试题:ArrayList 和 LinkedList 的区别?

3. List 的三种遍历方式,开发常用!

List 的遍历方式主要有三种,给你唠明白:

  1. 下标遍历:通过下标for循环遍历,用get(i)拿元素:

    java运行

    for(int i=0; i<list.size(); i++){
        Object obj = list.get(i);
    }
    
  2. forEach 遍历(增强 for 循环):开发里最常用的,底层原理是迭代器遍历:

    java运行

    for(Object obj : list){
        // 直接操作obj就行
    }
    
  3. 迭代器遍历:手动用Iterator遍历:

    java运行

    Iterator it = list.iterator();
    while(it.hasNext()){
        Object obj = it.next();
    }
    

今天先唠到这,List 接口和它的三大实现类的套路你 get 到了吗?下一篇咱们继续唠泛型和 Collections 工具类,还有 Set 接口,这些开发里的 “集合坑”,看完你就再也不会踩了!

更多推荐