当前位置: 首页 > article >正文

Java集合大总结——List的简单使用

List简单介绍

  • 鉴于Java中数组用来存储数据的局限性,我们通常使用java.util.List替代数组
  • List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。
  • JDK API中List接口的实现类常用的有:ArrayListLinkedListVector

List接口方法

List除了从Collection集合继承的方法外,List 集合里添加了一些根据索引来操作集合元素的方法。

  • 插入元素
    • void add(int index, Object ele):在index位置插入ele元素
    • boolean addAll(int index, Collection eles):从index位置开始将eles中的所有元素添加进来
  • 获取元素
    • Object get(int index):获取指定index位置的元素
    • List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex位置的子集合
  • 获取元素索引
    • int indexOf(Object obj):返回obj在集合中首次出现的位置
    • int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置
  • 删除和替换元素
    • Object remove(int index):移除指定index位置的元素,并返回此元素
    • Object set(int index, Object ele):设置指定index位置的元素为ele

List接口主要实现类:ArrayList

  • ArrayList 是 List 接口的主要实现类
  • 本质上,ArrayList是对象引用的一个”变长”数组
  • Arrays.asList(…) 方法返回的 List 集合,既不是 ArrayList 实例,也不是 Vector 实例。 Arrays.asList(…) 返回值是一个固定长度的 List 集合

ArrayList底层是Object数组
特定:查找和添加效率高;删除和插入的效率低。

List的实现类之二:LinkedList

对于频繁的插入或删除元素的操作,建议使用LinkedList类,效率较高。这是由底层采用链表(双向链表)结构存储数据决定的。
特有方法:

  • void addFirst(Object obj)
  • void addLast(Object obj)
  • Object getFirst()
  • Object getLast()
  • Object removeFirst()
  • Object removeLast()

List的实现类之三:Vector

  • Vector 是一个古老的集合,JDK1.0就有了。大多数操作与ArrayList相同,区别之处在于Vector是线程安全的。
  • 在各种List中,最好把ArrayList作为默认选择。当插入、删除频繁时,使用LinkedList;Vector总是比ArrayList慢,所以尽量避免使用。
  • 特有方法:
    • void addElement(Object obj)
    • void insertElementAt(Object obj,int index)
    • void setElementAt(Object obj,int index)
    • void removeElement(Object obj)
    • void removeAllElements()

面试题:以下代码输出结果为?

@Test
public void testListRemove() {
    List list = new ArrayList();
    list.add(1);
    list.add(2);
    list.add(3);
    updateList(list);
    System.out.println(list);
}

private static void updateList(List list) {
	//这里的参数2, 默认指的是索引,因为如果是值的话,还得进行装箱
	//装箱有消耗
    list.remove(2);  
}

在这里插入图片描述


http://www.kler.cn/a/135112.html

相关文章:

  • DAY112代码审计PHP开发框架POP链利用Yii反序列化POP利用链
  • 分布式锁实践方案
  • MFC工控项目实例二十九主对话框调用子对话框设定参数值
  • 应用于新能源汽车NCV4275CDT50RKG车规级LDO线性电压调节器芯片
  • Android音频架构
  • 基于Python+Django+Vue3+MySQL实现的前后端分类的商场车辆管理系统
  • 大模型的语言能力
  • Kotlin原理+协程基本使用
  • 从能用到好用,国产CPU不是你想象中的样子了?
  • C语言入门笔记—static、extern、define、指针、结构体
  • Flink Operator 使用指南 之 Flink Operatoran安装
  • 思维导图软件 Xmind mac中文版特点介绍
  • Netty源码学习4——服务端是处理新连接的netty的reactor模式
  • 【数据结构初阶(3)】双向带头结点循环链表
  • JS模块引入方式使用 importScripts 替代 import
  • 冬季如何养胃?羊大师建议水果蔬菜不可少!
  • 学习教授LLM逻辑推理11.19
  • 用照片预测人的年龄【图像回归】
  • centos7配置 局域网自动解析hostname
  • Apache Hive源码阅读环境搭建
  • 数据集成实施过程注意点总结
  • clusterProfiler包学习
  • 【数据结构初阶】单链表SLlist
  • STM32——STM32Cubemx的学习使用总结
  • C++类与对象(1)—初步认识
  • [Kettle] 生成随机数