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

java集合菜鸟教程

1、Java集合的分类

1Java中的集合类可以分为两大类:

(1)实现Collection接口,Collection是一个基本的集合接口,Collection中可以容纳一组集合元素(Element),图1是Collection与子类的关系图

(2)实现Map接口,Map没有继承Collection接口,与Collection是并列关系。Map提供键(key)到值(value)的映射。一个Map中不能包含相同的键,每个键只能映射一个值。图2是Map与子类的关系图。

图1

图2

   (3)图3是集合的思维导图

图3

 2、集合子类ArrayList

import java.util.ArrayList;
import java.util.List;public class Test1 {public static void main(String[] args) {List arraylist=new ArrayList();String str1="对象1";String str2="对象2";String str3="对象3";arraylist.add(str1);arraylist.add(str2);arraylist.add(str3);}
}

ArrayList和LinkedList的主要区别在于它们的底层数据结构、性能特点以及适用场景。

底层数据结构

  • ArrayList‌:基于动态数组实现,内部维护一个Object类型的数组来存储元素。当元素数量超过当前容量时,ArrayList会自动扩容,通常扩容为原容量的1.5倍‌。
  • LinkedList‌:基于双向链表实现,每个节点包含存储的元素、指向前一个节点的引用和指向下一个节点的引用。LinkedList不需要预先分配固定大小的空间,可以在链表的头部或尾部灵活地添加或删除元素‌。

性能特点

  • 访问元素‌:

    • ArrayList‌:通过索引访问元素的时间复杂度为O(1),因为可以直接通过数组索引访问。
    • LinkedList‌:通过索引访问元素的时间复杂度为O(n),因为需要从头或尾遍历到指定位置‌
  • 插入和删除元素‌:

    • ArrayList‌:在列表末尾插入或删除元素的时间复杂度为O(1),但在中间位置插入或删除元素的时间复杂度为O(n),因为需要移动后续元素。
    • LinkedList‌:在列表任意位置插入或删除元素的时间复杂度为O(1),因为只需要修改节点的引用,但查找位置的时间复杂度为O(n)‌23。
  • 扩容机制‌:

    • ArrayList‌:当数组容量不足时,会自动扩容,通常扩容为原容量的1.5倍。扩容时需要将旧数组的内容复制到新数组中,这会导致一定的性能损耗‌23。
    • LinkedList‌:不需要扩容,因为链表的大小是动态的‌2。

适用场景

  • ArrayList‌:适合于需要频繁访问特定位置数据的场景,如排行榜、购物车列表等。由于在中间位置插入或删除元素的开销较大,更适合查询多、增删少的场景‌3。
  • LinkedList‌:由于在任意位置插入或删除元素的开销较小,适合于需要频繁在列表中插入和删除元素的场景‌
http://www.xdnf.cn/news/327187.html

相关文章:

  • 从 CodeBuddy Craft 到 edgeone-pages-mcp 上线算命网站的一次完整体验分享
  • 多语言网站的 UX 陷阱与国际化实践陷阱清单
  • 前端面试每日三题 - Day 27
  • 【Python】os模块
  • 使用 Gradio + Qwen3 + vLLM 部署 Text2SQL 多表查询系统
  • 【Prometheus】深入解析 Prometheus 特殊标签 `__param_<name>`:动态抓取参数的艺术
  • Android 数据持久化之数据库存储 Room 框架
  • 50个精选DeepSeek指令
  • ifconfig statistics
  • springboot使用阿里云OSS实现文件上传
  • 云上玩转Qwen3系列之二:PAI-LangStudio搭建联网搜索和RAG增强问答应用
  • C++初阶 —— 类和对象
  • C++ 中的 `it->second` 和 `it.second`:迭代器与对象访问的微妙区别
  • 如何延长电脑使用寿命?
  • Cadence 高速系统设计流程及工具使用二
  • 学习黑客 Linux用户管理
  • Linux理解文件fd
  • 热部署相关
  • 说说es配置项的动态静态之分和集群配置更新API
  • Filecoin矿工资金管理指南:使用lotus-shed actor withdraw工具
  • Kubernetes学习笔记
  • 浅谈图像分割中预测图与标签图的对应关系
  • C++面向对象设计类的核心知识详解总述(1)
  • Spring 与 MyBatis 整合时的事务管理细节
  • 如何使用docker配置ros-noetic环境并使用rviz,gazebo
  • Nvidia-smi 运行失败(Failed to initialize NVML: Driver/library version mismatch)
  • Elasticsearch 8.x 在 java 中的使用情况
  • MIT关节电机相序校准
  • upload-labs靶场通关详解:第二关
  • 绕线机的制作与研究