Java 集合:单列集合和双列集合的深度剖析

引言

        在 Java 编程中,集合是一个非常重要的概念。它就像是一个容器,能够存储多个数据元素,帮助我们更方便地管理和操作数据。Java 集合框架主要分为单列集合和双列集合两大类,它们各自有着独特的特点和适用场景。接下来,让我们深入探究这两种集合。

单列集合

单列集合就像是一列整齐排列的数据队伍,每个元素都是独立的个体,按照一定的规则存储和组织。在 Java 中,单列集合的根接口是 java.util.Collection,它派生了多个子接口和实现类。

1. List 接口

List 接口的特点是元素有序且可重复。这意味着我们可以通过索引来访问集合中的元素,就像在书架上按照编号查找书籍一样。常见的 List 实现类有 ArrayList 和 LinkedList

ArrayList

ArrayList 基于数组实现,它在内存中是连续存储的。这使得它在随机访问元素时非常高效,就像在一本装订好的书中快速翻到指定页码一样。以下是一个简单的示例:

import java.util.ArrayList;
import java.util.List;public class ArrayListExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("apple");list.add("banana");list.add("cherry");System.out.println(list.get(1)); // 输出: banana}
}

不过,ArrayList 在插入和删除元素时可能会比较低效,因为需要移动后续的元素。

LinkedList

LinkedList 基于链表实现,元素之间通过引用相互连接。这使得它在插入和删除元素时非常高效,就像在一列火车中添加或移除车厢一样。但随机访问元素时效率较低,因为需要从头开始遍历链表。示例如下:

import java.util.LinkedList;
import java.util.List;public class LinkedListExample {public static void main(String[] args) {List<String> list = new LinkedList<>();list.add("apple");list.add("banana");list.add("cherry");list.add(1, "date");System.out.println(list); // 输出: [apple, date, banana, cherry]}
}

2. Set 接口

Set 接口的特点是元素无序且不可重复。这就好比一个装满不同颜色气球的袋子,每个气球都是独一无二的,并且没有固定的排列顺序。常见的 Set 实现类有 HashSet 和 TreeSet

HashSet

HashSet 基于哈希表实现,它通过哈希值来存储和查找元素。这使得它在添加、删除和查找元素时具有较高的效率。示例如下:

import java.util.HashSet;
import java.util.Set;public class HashSetExample {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("apple");set.add("banana");set.add("apple"); // 重复元素,不会被添加System.out.println(set); // 输出: [apple, banana]}
}
TreeSet

TreeSet 基于红黑树实现,它可以对元素进行排序。这就像一个按照字母顺序排列的字典,方便我们查找和比较元素。示例如下:

import java.util.TreeSet;
import java.util.Set;public class TreeSetExample {public static void main(String[] args) {Set<Integer> set = new TreeSet<>();set.add(3);set.add(1);set.add(2);System.out.println(set); // 输出: [1, 2, 3]}
}

双列集合

双列集合就像是一个表格,每一行都包含两个部分:键(Key)和值(Value)。键是唯一的,就像表格的索引,通过键可以快速找到对应的值。在 Java 中,双列集合的根接口是 java.util.Map

1. HashMap

HashMap 基于哈希表实现,它通过键的哈希值来存储和查找元素。这使得它在添加、删除和查找元素时具有较高的效率。示例如下:

import java.util.HashMap;
import java.util.Map;public class HashMapExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("apple", 1);map.put("banana", 2);map.put("cherry", 3);System.out.println(map.get("banana")); // 输出: 2}
}

需要注意的是,HashMap 不保证元素的顺序。

2. TreeMap

TreeMap 基于红黑树实现,它可以根据键的自然顺序或指定的比较器对元素进行排序。这就像一个按照字母顺序排列的电话簿,方便我们查找和比较元素。示例如下:

import java.util.TreeMap;
import java.util.Map;public class TreeMapExample {public static void main(String[] args) {Map<String, Integer> map = new TreeMap<>();map.put("banana", 2);map.put("apple", 1);map.put("cherry", 3);System.out.println(map); // 输出: {apple=1, banana=2, cherry=3}}
}

3. LinkedHashMap

LinkedHashMap 是 HashMap 的子类,它不仅具有 HashMap 的高效性,还能保持元素的插入顺序。示例如下:

import java.util.LinkedHashMap;
import java.util.Map;public class LinkedHashMapExample {public static void main(String[] args) {Map<String, Integer> map = new LinkedHashMap<>();map.put("banana", 2);map.put("apple", 1);map.put("cherry", 3);System.out.println(map); // 输出: {banana=2, apple=1, cherry=3}}
}

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

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

相关文章

layui 远程搜索下拉选择组件(多选)

模板使用&#xff08;lay-module/searchSelect&#xff09;&#xff0c;依赖于 jquery、layui.dist 中的 dropdown 模块实现&#xff08;所以data 格式请参照 layui文档&#xff09; <link rel"stylesheet" href"layui-v2.5.6/dist/css/layui.css" /&g…

通俗易懂的DOM1级标准介绍

前言 在前端开发中&#xff0c;DOM&#xff08;文档对象模型&#xff09;是我们操作网页内容的核心工具。前面的文章我们介绍了DOM0级、DOM2级事件模型&#xff0c;没有DOM1级事件模型这种概念&#xff0c;但有DOM1级标准。今天我们就来讨论DOM1级标准&#xff0c;看看它到底做…

python~http的请求参数中携带map

背景 调试 http GET请求的 map 参数&#xff0c;链路携带参数一直有问题&#xff0c;最终采用如下方式携带map 解决 user{"demo":"true","info":"王者"}url encode之后的效果如下所示 user%7B%22demo%22:%22true%22,%22info%22:%22…

(java/Spring boot)使用火山引擎官方推荐方法向大模型发送请求

首先在maven里面引入官方依赖 <dependency><groupId>com.volcengine</groupId><artifactId>volcengine-java-sdk-ark-runtime</artifactId><version>LATEST</version></dependency>然后我们编写测试类 package com.volcengin…

Scrum方法论指导下的Deepseek R1医疗AI部署开发

一、引言 1.1 研究背景与意义 在当今数智化时代&#xff0c;软件开发方法论对于项目的成功实施起着举足轻重的作用。Scrum 作为一种广泛应用的敏捷开发方法论&#xff0c;以其迭代式开发、快速反馈和高效协作的特点&#xff0c;在软件开发领域占据了重要地位。自 20 世纪 90 …

LeetCode 热题 100_搜索插入位置(63_35_简单_C++)(二分查找)(”>>“ 与 “/” 对比)

LeetCode 热题 100_搜索插入位置&#xff08;63_35&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;二分查找&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;二分查找&#xff09…

蓝桥与力扣刷题(蓝桥 交换瓶子)

题目&#xff1a;有 N 个瓶子&#xff0c;编号 1 ~ N&#xff0c;放在架子上。 比如有 5 个瓶子&#xff1a; 2 1 3 5 4 要求每次拿起 2 个瓶子&#xff0c;交换它们的位置。 经过若干次后&#xff0c;使得瓶子的序号为&#xff1a; 1 2 3 4 5 对于这么简单的情况&#x…

HTTPS 通信流程

HTTPS 通信流程时序图&#xff1a; #mermaid-svg-HWoTbFvfih6aYUu6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-icon{fill:#552222;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-text{fill:#…

Spring AutoWired与Resource区别?

大家好&#xff0c;我是锋哥。今天分享关于【Spring AutoWired与Resource区别?】面试题。希望对大家有帮助&#xff1b; Spring AutoWired与Resource区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Spring 中&#xff0c;Autowired 和 Resource 都是用于…

什么是HTTP/2协议?NGINX如何支持HTTP/2并提升网站性能?

HTTP/2是一种用于在Web浏览器和服务器之间进行通信的协议&#xff0c;旨在提高网站性能和加载速度。它是HTTP/1.1的继任者&#xff0c;引入了许多优化和改进&#xff0c;以适应现代Web应用的需求。HTTP/2的主要目标是减少延迟、提高效率&#xff0c;以及更好地支持并发请求。 …

【Bluedroid】AVRCP 连接源码分析(一)

一、AVRCP协议简介 AVRCP(Audio/Video Remote Control Profile)是蓝牙协议栈中的一个重要部分,它定义了蓝牙设备之间的音视频传输控制的流程和特点。AVRCP使得用户可以通过一个蓝牙设备(如手机)远程控制另一个蓝牙设备(如蓝牙耳机或音箱)上的音视频播放,如播放、暂停、…

【QT中的一些高级数据结构,持续更新中...】

QT中有一些很精妙、便捷的设计&#xff0c;在了解这些数据的同时&#xff0c;我们可以学到如何更好的设计代码。本贴持续更新中&#xff0c;欢迎关注和收藏 一 QScopedPointer主要特点&#xff1a;示例代码 二 Q_DISABLE_COPY 一 QScopedPointer QScopedPointer 是 Qt 中的一种…

行业分析---对自动驾驶规控算法的思考

1 前言 随着自动驾驶端到端大模型的兴起&#xff0c;小鹏、华为、理想、蔚来、小米等公司都对自动驾驶业务部进行了组织架构的调整&#xff0c;准备应对新的或者更高级别的自动驾驶研发任务。 近几年由于自动驾驶技术的快速发展&#xff0c;不少从业者觉得相关职业的未来充满了…

C++ 设计模式-模板方法模式

文件处理 #include <iostream>// 抽象基类&#xff1a;定义模板方法和抽象步骤 class DataProcessor { public:// 模板方法&#xff08;固定流程&#xff09;void Process() {OpenFile();ProcessData(); // 由子类实现CloseFile();}protected:virtual void ProcessData…

Deepseek快速做PPT

背景: DeepSeek大纲生成 → Kimi结构化排版 → 数据审查,细节调整 DeepSeek 拥有深度思考能力,擅长逻辑构建与内容生成,它会根据我们的问题进行思考,其深度思考能力当前测试下来,不愧为国内No.1,而且还会把中间的思考过程展示出来,大多时候会给出很多我们意想不到的思…

【多语言生态篇一】【DeepSeek×Java:Spring Boot微服务集成全栈指南 】

(手把手带你从零实现AI能力调用,万字长文预警,建议收藏实操) 一、环境准备:别输在起跑线上 1.1 硬件软件全家桶 JDK版本:必须 ≥17(Spring Boot 3.2+强制要求,低版本直接报错)IDE推荐:IntelliJ IDEA终极版(社区版缺Spring AI插件支持)构建工具:Maven 3.9+ / Grad…

【YOLOv8】损失函数

学习视频&#xff1a; yolov8 | 损失函数 之 5、类别损失_哔哩哔哩_bilibili yolov8 | 损失函数 之 6、定位损失 CIoU DFL_哔哩哔哩_bilibili 2.13、yolov8损失函数_哔哩哔哩_bilibili YOLOv8 的损失函数由类别损失和定位损失构成 类别损失&#xff1a;BCE Loss 定位损失…

DEMF模型赋能多模态图像融合,助力肺癌高效分类

目录 论文创新点 实验设计 1. 可视化的研究设计 2. 样本选取和数据处理 3. 集成分类模型 4. 实验结果 5. 可视化结果 图表总结 可视化知识图谱 在肺癌早期筛查中,计算机断层扫描(CT)和正电子发射断层扫描(PET)作为两种关键的影像学手段,分别提供了丰富的解剖结构…

小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试等,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。

小鱼深度评测 通义灵码2.0 1、引言2、通义灵码 更新与安装2.1 IDE插件更新2.1.1 PyCharm 更新2.1.2 VSCode 更新 2.2 官网下载更新 3、 使用体验3.1生成单元测试3. 2 跨语言编程3.3灵码2.0 与1.0 对比 4、总结 1、引言 通义灵码&#xff0c; 我一直使用的编码协助工具&#xf…

《微软量子芯片:开启量子计算新纪元》:此文为AI自动生成

量子计算的神秘面纱 在科技飞速发展的今天,量子计算作为前沿领域,正逐渐走进大众的视野。它宛如一把神秘的钥匙,有望开启未来科技变革的大门,而微软量子芯片则是这把钥匙上一颗璀璨的明珠。 量子计算,简单来说,是一种遵循量子力学规律调控量子信息单元进行计算的新型计算…