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

JavaSE知识总结(集合篇) ~个人笔记以及不断思考~持续更新

目录

集合

List

List的各种接口API

List的五种遍历方式

List的删除是内部是怎么做的?

ArrayList和LinkedList的区别

Vetor和Stack是什么?

Set

Set的特点

HashSet

TreeSet

LinkedHashSet

Map

HashMap

LinkedHashMap

TreeMap


集合

在Java中,集合分为单列集合和双列集合(也叫映射集合),单列集合接口主要有:List,Set。

双列集合(映射集合)主要有:Map

List

List是Collection的子接口,是java.util提供的,里面提供了很多的实现类,比如ArrayList,LinkedList,Vetor、Stack。

List的各种接口API

添加list.add

查找list.get

删除list.remove

修改list.set

List的五种遍历方式

迭代器遍历:可用于删除元素

List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {String fruit = iterator.next();System.out.println(fruit);
}

列表迭代器:用于添加元素

List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");ListIterator<String> listIterator = list.listIterator();
while (listIterator.hasNext()) {String fruit = listIterator.next();System.out.println(fruit);
}while (listIterator.hasPrevious()) {String fruit = listIterator.previous();System.out.println(fruit);
}

for循环

增强for循环

Lambda迭代器

List的删除是内部是怎么做的?

ArrayList的删除:如果删除第一个和中间的,会使其他的元素向前移动,然后调整数组大小,如果删除最后一个只需要调整大小即可

LinkedList的删除:如果删除第一个改变头节点,如果删除中间的就把上一个节点指向下一个节点就可以,如果删除最后一个只需更新尾节点的前一个节点,然后将尾节点的引用置空。

ArrayList和LinkedList的区别

ArrayList底层是动态数组,内存是连续的,创建时候其实是空参创建的,当添加第一个元素的时候,他会初始化10个容量,当满了的时候会扩大1.5倍。ArrayList查询快。因为是数组有索引内存连续 常数时间复杂度o(1) 但是删除线性时间复杂度为O(n) 因为删除过程麻烦。

ps:ArrayList的扩容是属于重新建了一个数组

ListedList的底层是一个双向链表,它有一些独特的API,查找慢,因为需要遍历整个链表,但是插入和删除快,因为插入的话直接插入节点就可以。

  1. 添加元素

    • add(E e):在链表末尾添加元素。
    • add(int index, E element):在指定位置插入元素。
    • addFirst(E e):在链表头部添加元素。
    • addLast(E e):在链表尾部添加元素。
  2. 删除元素

    • remove(int index):删除指定位置的元素。
    • remove(Object o):删除第一个匹配的元素。
    • removeFirst():删除链表头部的元素。
    • removeLast():删除链表尾部的元素。
  3. 获取元素

    • get(int index):获取指定位置的元素。
    • getFirst():获取链表头部的元素。
    • getLast():获取链表尾部的元素。

Vetor和Stack是什么?

Vetor是ArrayList的线程安全版本,使用Sychronized实现的,Stack是一种后进先出的数据结构。

Set

Set的特点

Set的特点就是无序、不重复,无索引。实现类有Hashset、TreeSet、LinkedHashSet。

HashSet

HashSet是用哈希表存储数据的,无序、不重复、无索引,通过哈希函数去计算并映射到哈希表的位置上面 (可能出现哈希碰撞)。增删改都是O(1)

TreeSet

基于红黑树去实现的,特点是无索引,不重复,可排序,增删改是O(logn)

LinkedHashSet

双向链表+哈希表,有序不重复无索引,增删改查都是o(1)因为增删改是用双向链表而查找是用哈希表。

Map

Map的实现类有HashMap、TreeMap、LinkedHashMap。

HashMap

LinkedHashMap

TreeMap

http://www.lqws.cn/news/71641.html

相关文章:

  • 《深度探索C++对象模型》阅读笔记(完整版)
  • Linux之进程间通信
  • AJAX对于XML和JSON的处理
  • Missashe考研日记—Day51-Day57
  • 企业级开发中的 maven-mvnd 应用实践
  • window ollama部署模型
  • QT入门学习(二)---继承关系、访问控制和变量定义
  • C++ 标准输入输出 -- <iostream>
  • 修改vscode切换上一个/下一个标签页快捷键
  • demo_win10配置WSL、DockerDesktop环境,本地部署Dify,ngrok公网测试
  • 安装DockerDocker-Compose
  • 【DBA】MySQL经典250题,改自OCP英文题库中文版(2025完整版)
  • AIGC工具平台-GPT-SoVITS-v4-TTS音频推理克隆
  • 短视频平台差异视角下开源AI智能名片链动2+1模式S2B2C商城小程序的适配性研究——以抖音与快手为例
  • 【Doris基础】Apache Doris中的Coordinator节点作用详解
  • 工作流引擎-18-开源审批流项目之 plumdo-work 工作流,表单,报表结合的多模块系统
  • 深入解析 Python 字符串方法:从基础到高级应用
  • 深度学习和神经网络 卷积神经网络CNN
  • DAY 41 简单CNN
  • 传送文件利器wormhole的使用方法
  • 打开一个新的Maven工程要做的事情
  • 从0开始学vue:pnpm怎么安装
  • 启动metastore时报错MetaException(message:Version information not found in metastore
  • 计算机组成原理核心剖析:CPU、存储、I/O 与总线系统全解
  • ⚡️ Linux grep 命令参数详解
  • Redis部署架构详解:原理、场景与最佳实践
  • RocketMQ 消息发送核心源码解析:DefaultMQProducerImpl.send () 方法深度剖析
  • 初识Linux指令(笔记2)
  • gcc编译构建流程-动态链接库
  • 【端午安康】龙舟争渡Plug-In