JavaSE——集合框架一(3/7)-List系列集合:特点、方法、遍历方式、ArrayList集合的底层原理

简介: JavaSE——集合框架一(3/7)-List系列集合:特点、方法、遍历方式、ArrayList集合的底层原理

List集合

我们要了解List集合三点:

  1. 有什么特点?
  2. 是否有特有功能?
  3. 适合什么业务场景?

特点、特有方法


List系列集合特点:有序、可重复、有索引

  • ArrayList:有序,可重复,有索引
  • LinkedList:有序,可重复,有索引

它们的底层实现不同,适合的场景不同。

List集合的特有方法

  • List集合因为支持索引,所以多了很多与索引相关的方法,当然,Collection的功能List也都继承了。
  • 图片.png

实例演示

import java.util.LinkedList;
import java.util.List;
 
public class ListDemo1 {
    public static void main(String[] args) {
        //1.创建一个ArrayList集合对象(有序、可重复、有索引)
        List<String> list = new LinkedList<>();     //一行经典代码(常用)
        list.add("蜘蛛精");
        list.add("至尊宝");
        list.add("至尊宝");
        list.add("牛夫人");
        System.out.println(list);                   //{蜘蛛精,至尊宝,至尊宝,牛夫人}
 
        //2.public void add(int index,E element):在某个索引位置插入元素
        list.add(2,"紫霞仙子");
        System.out.println(list);                   //{蜘蛛精,至尊宝,紫霞仙子,至尊宝,牛夫人}
 
        //3.public E remove(int index) :根据索引删除元素,返回被删除元素
        System.out.println(list.remove(2));   //紫霞仙子
        System.out.println(list);                   //{蜘蛛精,至尊宝,至尊宝,牛夫人}
 
        //4.public E get(int index):返回集合中制定位置的元素
        System.out.println(list.get(3));            //牛夫人
 
        //5.public E set(int index,E element):修改索引位置处的元素,修改成功后,会返回原来的数据
        System.out.println(list.set(3, "牛魔王"));   //牛夫人
        System.out.println(list);                   //{蜘蛛精,至尊宝,至尊宝,牛魔王}
    }
}

运行结果:


List集合支持的遍历方式

  1. for循环(因为List集合有索引)
  2. 迭代器
  3. 增强for循环
  1. Lambda表达式
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
 
public class ListDemo1 {
    public static void main(String[] args) {
        //1.创建一个ArrayList集合对象(有序、可重复、有索引)
        List<String> list = new LinkedList<>();     //一行经典代码(常用)
        list.add("蜘蛛精");
        list.add("至尊宝");
        list.add("牛夫人");
 
        //1.for循环
        for(int i = 0;i < list.size(); i++){
            String s = list.get(i);
            System.out.println(s);
        }
        System.out.println();
        //2.迭代器
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
        System.out.println();
        //3.增强for循环(foreach)
        for(String s:list){
            System.out.println(s);
        }
        System.out.println();
        //4.JDK1.8开始之后的Lambda表达式
        list.forEach(s ->{
            System.out.println(s);
        });
    }
}

运行结果:


ArrayList集合的底层原理

  • 基于数组实现的。

数组的特点:查询快、增删慢

  • 查询速度快(注意:是根据索引查询数据快):查询数据通过地址值和索引定位,查询任意数据耗时相同。
  • 删除效率低:可能需要把后面很多的数据进行前移。
  • 添加效率极低::可能需要把后面很多的数据后移,再添加元素;或者也可能需要进行数组的扩容。

ArrayList集合的执行流程


  1. 利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组
  2. 添加第一个元素时,底层会创建一个新的长度为10的数组
  3. 存满时,会扩容1.5倍
  4. 如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准

ArrayList集合的应用场景

  1. ArrayList适合:根据索引查询数据,比如根据随机索引取数据(高效)!或者数据量不是很大时!
  2. ArrayList不适合:数据量大的同时又要频繁的进行增删操作!

END



目录
相关文章
|
4月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
85 5
|
3月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
58 0
|
4月前
|
设计模式 安全 容器
数据结构第一篇【探究List和ArrayList之间的奥秘 】
数据结构第一篇【探究List和ArrayList之间的奥秘 】
36 5
|
4月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
40 3
|
8月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1107 1
|
7月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
|
7月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
7月前
|
存储 安全 Java
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
|
8月前
|
Java API
使用 Java 来实现两个 List 的差集操作
使用 Java 来实现两个 List 的差集操作
266 3
|
7月前
|
存储 Java 索引
Java List接口实现原理与性能评估
Java List接口实现原理与性能评估