JAVA集合知识总结(一)

文章目录

  • JAVA集合知识总结(一)
      • 集合相关类
    • Collection
      • 1. Collection 接口的方法
        • 1.1 添加元素
        • 1.2 删除元素
        • 1.3 查找元素
        • 1.4 遍历集合
        • 1.5 集合操作
        • 1.6 转换为其他格式
      • 2. 遍历方式
        • 2.1 使用 Iterator 遍历
        • 2.2 使用增强型 for 循环
        • 2.3 使用 forEach 和 Lambda 表达式
    • List
      • 1. List 接口的核心方法
      • 2. List 的常用实现类
        • 2.1 ArrayList
        • 2.2 LinkedList
        • 2.3 Vector(不建议使用)
        • 2.4 CopyOnWriteArrayList
      • 3. List 的特性
        • 3.1 有序性
        • 3.2 允许重复
        • 3.3 基于索引的操作
      • 4. List 与数组的对比
      • 5. 线程安全与 List
        • 非线程安全的 List
        • 线程安全的 List
      • 6. 遍历 List 的方式
        • 6.1 使用 for 循环
        • 6.2 使用增强 for 循环
        • 6.3 使用迭代器
        • 6.4 使用 Stream
      • 7. 常见的 List 操作
        • 7.1 排序
        • 7.2 替换所有元素
        • 7.3 集合转数组
        • 7.4 反转 List
      • 8. 总结


JAVA集合知识总结(一)


Java 集合框架 是一组用于存储和操作数据的类和接口。核心接口包括 CollectionListSetQueueMap 等。这些接口有多种实现,满足不同的数据结构需求。


集合相关类

java.util.Collection(接口)
├── List(接口)
│   ├── ArrayList
│   ├── LinkedList
│   ├── Vector
│   │   └── Stack
├── Set(接口)
│   ├── HashSet
│   │   └── LinkedHashSet
│   └── SortedSet
│       └── NavigableSet
│           └── TreeSet
└── Queue(接口)├── PriorityQueue├── Deque│   ├── ArrayDeque│   └── LinkedList  (实现了 List 和 Deque)java.util.Map (接口)
├── HashMap
│   └── LinkedHashMap
├── Hashtable
│   └── Properties
└── SortedMap└── NavigableMap└── TreeMap

Collection

Collection 是 Java 单列集合框架的根接口,定义了操作一组对象(元素)的通用方法。Collection 作为集合类的基础接口,它有多个子接口和实现类,主要用于表示一组单一对象的集合,如 ListSetQueue


1. Collection 接口的方法

1.1 添加元素
  • boolean add(E e):向集合中添加元素。如果集合因添加操作而发生变化,则返回 true
  • boolean addAll(Collection<? extends E> c):将指定集合中的所有元素添加到当前集合中。
1.2 删除元素
  • boolean remove(Object o):删除集合中指定的元素,成功删除则返回 true
  • boolean removeAll(Collection<?> c):删除当前集合中与指定集合中的元素相同的元素。
  • boolean retainAll(Collection<?> c):保留当前集合中与指定集合中相同的元素,删除其他元素。
1.3 查找元素
  • boolean contains(Object o):判断集合中是否包含指定的元素。
  • boolean containsAll(Collection<?> c):判断当前集合是否包含指定集合中的所有元素。
1.4 遍历集合
  • Iterator<E> iterator():返回一个用于遍历集合中元素的迭代器。
  • void forEach(Consumer<? super E> action):对集合中的每个元素执行给定操作(使用 lambda 表达式时非常有用)。
1.5 集合操作
  • int size():返回集合中的元素个数。
  • boolean isEmpty():判断集合是否为空。
  • void clear():清空集合中的所有元素。
1.6 转换为其他格式
  • Object[] toArray():将集合转换为一个数组。
  • <T> T[] toArray(T[] a):将集合转换为指定类型的数组。

2. 遍历方式

2.1 使用 Iterator 遍历
  • IteratorCollection 提供的一种遍历集合的机制。使用时通过 hasNext() 判断是否有下一个元素,通过 next() 获取元素。
Collection<String> collection = new ArrayList<>();
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {String element = iterator.next();System.out.println(element);
}
2.2 使用增强型 for 循环
  • 增强型 for 循环(即 “for-each”)是一种简化的遍历集合的方式。
for (String element : collection) {System.out.println(element);
}
2.3 使用 forEach 和 Lambda 表达式
  • Lambda 表达式 是 Java 8 引入的一种简洁的遍历集合方式。
collection.forEach(element -> System.out.println(element));

List

List 是 Java 集合框架中的一个接口,表示有序的元素集合,允许包含重复元素。List 提供基于索引的操作,允许插入、删除和访问元素。


1. List 接口的核心方法

  • add(E e):将元素添加到列表末尾。
  • get(int index):返回指定索引处的元素。
  • set(int index, E element):替换指定索引处的元素。
  • remove(int index):移除指定索引处的元素。
  • size():返回列表中元素的个数。
  • indexOf(Object o):返回指定元素第一次出现的索引。
  • contains(Object o):检查列表是否包含某个元素。

2. List 的常用实现类

2.1 ArrayList
  • 特点
    • 底层基于动态数组,支持快速随机访问。
    • 支持 null 元素。
    • 查询性能好,插入/删除性能较差(特别是中间操作)。
  • 适用场景:读操作频繁,插入和删除较少的场景,例如:缓存数据、频繁查询的列表。
2.2 LinkedList
  • 特点
    • 基于双向链表实现,增删操作性能好,尤其是在头尾操作。
    • 随机访问性能差,遍历时需要从头或尾逐个查找。
    • 同时实现了 Deque 接口,支持栈和队列操作。
  • 适用场景:需要频繁插入和删除操作的场景,例如:队列、堆栈、双端队列。
2.3 Vector(不建议使用)
  • 特点
    • 基于动态数组,和 ArrayList 类似,但所有方法都同步,线程安全。
    • ArrayList 性能差,因为加了同步锁。
  • 适用场景:在多线程环境中需要线程安全的动态数组。
2.4 CopyOnWriteArrayList
  • 特点
    • 线程安全的 List 实现,每次修改都会复制底层数组,读操作无锁。
    • 适合读多写少的并发场景。
  • 适用场景:高并发读操作,多线程环境下的常用数据容器。

3. List 的特性

3.1 有序性
  • List 保持插入顺序,元素可以通过索引进行访问。
3.2 允许重复
  • List 允许包含重复元素,不同于 Set,可以多次存储相同的元素。
3.3 基于索引的操作
  • List 提供基于索引的插入、删除和访问功能,允许直接操作指定位置的元素。

4. List 与数组的对比

  • 长度变化ArrayList 可以动态增长,数组的长度固定。
  • 存储效率:数组在空间上更节省,但操作灵活性较差;ArrayList 需要一定的扩容机制,可能会浪费空间。
  • 线程安全:数组本身是非线程安全的;VectorCopyOnWriteArrayList 是线程安全的。

5. 线程安全与 List

非线程安全的 List
  • ArrayListLinkedList 是非线程安全的,多线程并发操作可能导致数据不一致。
线程安全的 List
  • VectorCopyOnWriteArrayList 是线程安全的。
  • 也可以使用 Collections.synchronizedList() 将非线程安全的 List 变为线程安全。
List<String> syncList = Collections.synchronizedList(new ArrayList<>());

6. 遍历 List 的方式

6.1 使用 for 循环
for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));
}
6.2 使用增强 for 循环
for (String element : list) {System.out.println(element);
}
6.3 使用迭代器
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {System.out.println(iterator.next());
}
6.4 使用 Stream
list.stream().forEach(System.out::println);

7. 常见的 List 操作

7.1 排序

使用 Collections.sort(list)list.sort(comparator) 对列表进行排序。

7.2 替换所有元素

使用 Collections.replaceAll(list, oldVal, newVal) 来替换所有出现的元素。

7.3 集合转数组
String[] array = list.toArray(new String[0]);
7.4 反转 List

使用 Collections.reverse(list) 可以反转列表顺序。


8. 总结

Collection 是 Java 单列集合框架的根接口,定义了操作一组对象(元素)的通用方法。
List 是 Java 集合框架中的一个接口,继承Collection接口。List表示有序的元素集合,允许包含重复元素。List有多种实现类(ArrayList, LinkedList等),对应于不同场景对集合的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/453074.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker架构

什么是 Docker&#xff1f; Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 使您能够将应用程序与基础设施分离&#xff0c;从而更快速地交付软件。通过 Docker&#xff0c;您可以像管理应用程序一样管理基础设施。利用 Docker 在代码发布、测试和部署方面的方…

聚焦IOC容器刷新环节postProcessBeanFactory(BeanFactory后置处理)专项

目录 一、IOC容器的刷新环节快速回顾 二、postProcessBeanFactory源码展示分析 &#xff08;一&#xff09;模版方法postProcessBeanFactory &#xff08;二&#xff09;AnnotationConfigServletWebServerApplicationContext 调用父类的 postProcessBeanFactory 包扫描 …

数字后端零基础入门系列 | Innovus零基础LAB学习Day2

今天开始更新数字IC后端设计实现中Innovus零基础Lab学习后续内容。 数字后端零基础入门系列 | Innovus零基础LAB学习Day1 ####LAB5-2 这个章节的目标也很明确——学习掌握工具的一些常用快捷键。 这里只需要掌握以下几个快捷键即可。其他小编我也不会&#xff0c;也用不着。…

MATLAB电车(宝马 i3)卸载电池再利用电气模型分析

&#x1f3af;要点 特性测试评估卸载电池性能以及不同温度下电池容量和电阻。使用两种电气模型评估和模拟卸载电池可利用性能。从宝马 i3模块中提取三星三元锂方形电池作为评估电池&#xff1a;容量测量、电阻测量&#xff0c;对比新电池性能。使用的等效电路模型以及用于校准…

文心一言 VS 讯飞星火 VS chatgpt (373)-- 算法导论24.4 5题

五、请稍微修改 Bellman-Ford 算法&#xff0c;使其能够在 〇(nm) 时间内解决由 n 个未知变量和 m 个约束条件所构成的差分约束系统问题。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; Bellman-Ford 算法本身就是一个用于解决差分约束系统问题的经典算法&…

【途牛旅游网-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

工作日志:vue3各种警告

1、遇见报错&#xff0c;但也没啥影响&#xff0c;不知怎么回事。 可是我没写过这东西啊。 2、一个警告。 它表示在渲染过程中尝试访问组件实例上不存在的属性linkTags。 解决办法&#xff1a;在该属性前&#xff0c;加个v-if判断。 3、 意味着在模板渲染过程中尝试访问了…

LeetCode102. 二叉树的层序遍历(2024秋季每日一题 43)

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]] 示例 2&#xff1a; 输入…

数据结构 - 队列

队列也是一种操作受限的线性数据结构&#xff0c;与栈很相似。 01定义 栈的操作受限表现为只允许在队列的一端进行元素插入操作&#xff0c;在队列的另一端只允许删除操作。这一特性可以总结为先进先出&#xff08;First In First Out&#xff0c;简称FIFO&#xff09;。这意味…

【资料集】项目全周期过程管理资料、各类软件建设方案、源码梳理清单(全原件)

该资源库深度覆盖开发、运维、实施等核心流程&#xff0c;全面囊括项目从立项至结项的各类必需文档&#xff0c;如验收辅助材料、资质审核流程及投标策略方案等&#xff0c;确保项目生命周期的每个阶段都能找到相应的支持与依据。此外&#xff0c;资源库精心整理了研发流程细节…

Docker 容器 数据卷 使用

目录 常用 命令 什么是数据卷以及特点 如何挂载数据卷 数据卷容器 数据覆盖问题 修改已经建立的数据卷关系 博主wx&#xff1a;yuanlai45_csdn 博主qq&#xff1a;2777137742 想要 深入学习 5GC IMS 等通信知识(加入 51学通信)&#xff0c;或者想要 cpp 方向修改简历&…

Nuxt.js 应用中的 build:done 事件钩子详解

title: Nuxt.js 应用中的 build:done 事件钩子详解 date: 2024/10/21 updated: 2024/10/21 author: cmdragon excerpt: build:done 是 Nuxt.js 的一个生命周期钩子,它在 Nuxt 应用的打包构建器完成运行后被调用。这个钩子为开发者提供了一个在构建过程结束后执行特定逻辑的…

Java基于SpringBoot微信小程序的跳蚤市场系统设计与实现(lw+数据库+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

数据分析和可视化python库orange简单使用方法

Orange 是一个基于 Python 的数据挖掘和机器学习库&#xff0c;它提供了一系列可视化工具和算法&#xff0c;用于数据分析、机器学习和数据可视化等任务。 一、主要特点 可视化界面&#xff1a;Orange 提供了直观的可视化界面&#xff0c;使得用户可以通过拖放操作构建数据分…

学习文档(5)

Redis应用 目录 Redis应用 Redis 除了做缓存&#xff0c;还能做什么&#xff1f; Redis 可以做消息队列么&#xff1f; Redis 可以做搜索引擎么&#xff1f; 如何基于 Redis 实现延时任务&#xff1f; Redis 除了做缓存&#xff0c;还能做什么&#xff1f; 分布式锁&…

AI‘林黛玉发疯文学’火了!40篇笔记涨粉30万,这是怎么做到的?五步教你!

本文背景 最近老刷到林黛玉那种阴阳怪气的“发疯文学”视频呢。在 小红书 搜了搜相关话题&#xff0c;嘿&#xff0c;带“#林黛玉”的话题浏览量有 9.8 亿之多&#xff0c;像“#林黛玉发疯文学”的标签浏览量也有七千多万次&#xff0c;“林黛玉倒拔垂杨柳”都有 1332 万次浏览…

Java--集合(三)之vectorlinkedlisthashset结构

文章目录 0.架构图1.vector解析2.LinkedList分析2.1源码分析2.2迭代器遍历的三种方式 3.set接口的使用方法3.1基本使用说明3.2基本遍历方式3.3HashSet引入3.4数组链表模拟3.5hashset扩容机制3.6hashset源码解读3.7扩容*转成红黑树机制**我的理解 0.架构图 1.vector解析 和之前介…

mysql 10 单表访问方法

01.优化的过程 对于我们这些 MySQL 的使用者来说&#xff0c; MySQL 其实就是一个软件&#xff0c;平时用的最多的就是查询功能。DBA时不时丢过来一些慢查询语句让优化&#xff0c;我们如果连查询是怎么执行的都不清楚还优化个毛线&#xff0c;所以是时候掌握真正的技术了。我…

Jupyter notebook中更改字体大小

文章目录 方法一&#xff1a;局部修改方法二&#xff1a;全局修改 Jupyter notebook提供了一个非常方便的跨平台交互代码编译环境&#xff0c;但是单元格的内的代码字体往往显示较小&#xff0c;不利于观看。本人查了很多方法来调整字体&#xff0c;后来发现既不需要更改jupyte…

HCIP-HarmonyOS Application Developer 习题(十二)

&#xff08;多选&#xff09;1、声明式开发范式的转场动画包含以下哪几种类型? A、页面间转场 B、应用间转场 C、共享元素转场 D、组件内转场 答案&#xff1a;ACD 分析&#xff1a; &#xff08;多选&#xff09;2、公共事件服务为应用程序提供哪些能力。 A、取消发布公共…