挖掘Java集合:深入探索List接口与HashSet

news2024/11/25 0:25:43

文章目录

    • 引言
    • LinkedList:双向链表的实现
    • 构造方法
    • LinkedList中的常用方法
    • HashSet:无序且唯一的集合
    • HashSet的实现方式
    • LinkedHashSet:有序且唯一
    • 可变长度参数
    • 结论

在这里插入图片描述

引言

在广阔的Java编程领域中,集合就如同宝库,提供了多种工具和数据结构来高效地管理数据。其中,List接口和HashSet实现作为基本组件,各自具有独特的特点和用途。在本篇文章中,我们将深入了解LinkedList类,探索HashSet以及它的衍生类LinkedHashSet,并涉及可变长度参数的概念。
在这里插入图片描述

LinkedList:双向链表的实现

Java的集合框架中,LinkedList是一个基础类,它基于双向链表的概念,每个元素都持有对前一个和后一个元素的引用。LinkedList以其快速的插入和删除操作而闻名,但查询性能较慢。

// 创建一个LinkedList实例
LinkedList<String> linkedList = new LinkedList<>();

在这里插入图片描述

构造方法

LinkedList提供了多种构造方法,以多种方式创建实例。其中两个关键的构造方法是:

  1. LinkedList():构造一个空列表。
  2. LinkedList(Collection<? extends E> c):构造一个包含指定集合的元素的列表,元素按照集合迭代器的返回顺序排列。
    在这里插入图片描述

LinkedList中的常用方法

LinkedList提供了一系列方法,满足各种需求:

  • void addFirst(E e):在列表开头插入指定元素。
  • void addLast(E e):在列表末尾添加指定元素。
  • E getFirst():返回列表中的第一个元素。
  • E getLast():返回列表中的最后一个元素。
  • E removeFirst():移除并返回列表中的第一个元素。
  • E removeLast():移除并返回列表中的最后一个元素。
  • void push(E e):将元素推入由列表表示的堆栈。
  • E pollFirst():检索并移除列表的第一个元素,如果列表为空则返回null。
  • E pollLast():检索并移除列表的最后一个元素,如果列表为空则返回null。
// 示例演示部分LinkedList的常用方法
linkedList.addFirst("First");
linkedList.addLast("Last");
String firstElement = linkedList.getFirst();
String lastElement = linkedList.getLast();
String removedFirst = linkedList.removeFirst();
String removedLast = linkedList.removeLast();

在这里插入图片描述

HashSet:无序且唯一的集合

HashSet是Set接口的一种实现,它保证不包含重复元素且无特定顺序。HashSet的实现基于底层的HashMap,其中元素被视为键。

// 创建一个HashSet实例
HashSet<String> hashSet = new HashSet<>();

在这里插入图片描述

HashSet的实现方式

  • JDK 1.8之前:数组 + 链表
  • JDK 1.8及以后:数组 + 链表 + 红黑树

向HashSet添加元素时,会检查元素的hashCode值。如果hashCode在数组中不存在,元素将被存储。如果hashCode存在,则使用equals方法比较值。如果值匹配,不进行存储;否则,使用链表结构进行存储。在JDK 1.8及以后,如果链表的长度大于等于8,将会转化为红黑树结构。

LinkedHashSet:有序且唯一

LinkedHashSet是HashSet的扩展,保留了插入顺序的同时确保唯一性。它结合了HashSet和LinkedList的特点,适用于需要保持顺序和独特性的场景。

// 创建一个LinkedHashSet实例
LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();

可变长度参数

在Java中,方法可以使用省略号...接受相同类型的可变数量参数,这些参数在方法内部被视为数组。然而,有两点要记住:

  • 如果与其他参数组合使用,可变长度参数必须放在参数列表的最后。
  • 方法的参数列表中只能使用一次可变长度参数。
// 示例演示可变长度参数的使用
public void printItems(String... items) {
    for (String item : items) {
        System.out.println(item);
    }
}

在这里插入图片描述

结论

List接口、LinkedList、HashSet和LinkedHashSet提供了不同的数据管理方式。通过了解它们的特性、构造方法和方法,开发人员可以根据项目需求明智地选择使用哪种集合。可变长度参数在参数数量不确定时提供了灵活性。在Java的集合世界中,这些工具使开发人员能够编写高效且富有表现力的代码。

在这里插入图片描述

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

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

相关文章

Clickhouse学习系列——一条SQL完成gourp by分组与不分组数值计算

笔者在近一两年接触了Clickhouse数据库&#xff0c;在项目中也进行了一些实践&#xff0c;但一直都没有一些技术文章的沉淀&#xff0c;近期打算做个系列&#xff0c;通过一些具体的场景将Clickhouse的用法进行沉淀和分享&#xff0c;供大家参考。 首先我们假设一个Clickhouse数…

python基础3——流程控制

文章目录 一、操作符1.1 比较操作符1.2 逻辑操作符1.3 成员操作符1.4 身份操作符 二、流程控制2.1 条件判断2.2 循环语句2.2.1 for循环2.2.2 while循环 2.3 continue与break语句2.4 文件操作函数 三、函数3.1 定义函数3.2 作用域3.3 闭包3.4 函数装饰器3.5 内建函数 一、操作符…

一文看懂 D类数字功放原理及应用

他V hezkz17进数字音频系统研究开发交流答疑群(课题组) D类放大器工作在开关状态&#xff0c;作为控制元件的晶体管本身消耗功率较低&#xff0c;功放的效 率就高&#xff0c;可达 90%以上&#xff0c;因此能较大地降低能源损耗&#xff0c;减小放大器体积。D 类音 频功率放大器…

面试热题(最长上升子序列)

给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 输入&#xff1…

Docker容器监控(Cadvisor +Prometheus+Grafana)

环境部署&#xff0c;接着上一篇文章Docker容器部署&#xff08;Cadvisor InfluxDBGrafana&#xff09;开始 目录 1、先清理一下容器 2、部署Cadvisor 3、访问Cadvisor页面 4、部署Prometheus 5、准备配置 6、运行prometheus容器 7、访问prometheus页面 8、部署Grafan…

录屏怎么录声音?很简单,轻松操作!

“录屏的时候怎么把声音录进去呀&#xff1f;今天用手机录了一段视频&#xff0c;录完后打开却发现没有声音&#xff0c;真的服了&#xff0c;录了好久了&#xff0c;有没有人知道怎么才能录制声音呀&#xff1f;” 录屏是一种非常实用的技术&#xff0c;可以帮助我们记录屏幕…

PHPstudy配置伪静态步骤,tp5.1的框架

搜索mod_rewrite.so&#xff0c;然后去掉前面的#&#xff08;即放开注释&#xff09; 2.找到index.php 同级文件.htaccess&#xff08;没有就新建&#xff09; 这些是tp5.1自带的内容&#xff0c;把它注释掉&#xff0c;是错误的内容&#xff0c;添加下面的这段配置 #<If…

SIT1042AQ5V 供电,IO 口兼容 3.3V,±58V 总线耐压,CAN FD 待机模式总线收发器

等领域&#xff0c;支持 5Mbps 灵活数据速率 CAN FD &#xff0c;具有在总线与 CAN 协议控制器之间进行差分信号传 输的能力。 SIT1042AQ 为 SIT1042Q 芯片的升级版本&#xff0c;改善了总线信号的对称性&#xff0c;拥有更低的电磁辐射性能。 另外&#xff0c;SIT104…

ffplay数据结构分析(一)

本文为相关课程的学习记录&#xff0c;相关分析均来源于课程的讲解&#xff0c;主要学习音视频相关的操作&#xff0c;对字幕的处理不做分析 下面我们对ffplay的相关数据结构进行分析&#xff0c;本章主要是对PacketQueue的讲解 struct MyAVPacketList和PacketQueue队列 ffp…

线程池-手写线程池C++11版本(生产者-消费者模型)

本项目是基于C11的线程池。使用了许多C的新特性&#xff0c;包含不限于模板函数泛型编程、std::future、std::packaged_task、std::bind、std::forward完美转发、std::make_shared智能指针、decltype类型推断、std::unique_lock锁等C11新特性功能。 本项目有一定的上手难度。推…

浏览器是如何渲染页面的?

浏览器是如何渲染页面的&#xff1f; 当浏览器的网络线程收到 HTML 文档后&#xff0c;会产生一个渲染任务&#xff0c;并将其传递给渲染主线程的消息队列。 在事件循环机制的作用下&#xff0c;渲染主线程取出消息队列中的渲染任务&#xff0c;开启渲染流程。 整个渲染流程分…

对员工画饼out了,领导力之我的地盘TA做主

90后的员工为什么爱离职? 我想了一年&#xff0c;才嗅到一丝隐晦的内味。因为不结婚、不生娃、不买房、不买车&#xff0c;没压力&#xff0c;骂TA还敢顶嘴。 员工动力不足&#xff0c;没有干劲&#xff0c;宁愿熬夜打游戏&#xff0c;也不愿意多加班&#xff0c;到底是工资…

Springboot03--restful、swagger+orm/mybatis,mybatis-plus

参考这个方法配置&#xff0c;主要是我的springboot和swagger的版本号的问题 SpringBoot2.7.14集成Swagger3.0 (liqinglin0314.com) 常用的一些注解 放在controller里面 2. mybatisplus <!-- MyBatisPlus依赖--><dependency><groupId>com.baomidou</gr…

FL Studio低版本怎么免费升级:FL Studio升级要钱吗?

为了更好的服务国内FL Studio用户&#xff0c;FL Studio 官网提供了跨版本升级的服务&#xff0c;用户可以通过缴纳一定的费用&#xff0c;将自己已购买的入门版或其他非完整版的版本&#xff0c;升级为更高的版本&#xff0c;解锁更多的插件&#xff0c;而无需重新购买整套版本…

嵌入式开发学习(STC51-4-蜂鸣器)

内容 控制蜂鸣器发出声音&#xff0c;一段时间后关闭 蜂鸣器简介 蜂鸣器是一种一体化结构的电子讯响器&#xff0c;采用直流电压供电&#xff0c;广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件&#xff1b; 蜂…

算法通关村第六关——如何使用中序和后序来恢复一颗二叉树

1 树的基础知识 1.1 树的定义 树(Tree)&#xff1a;表现得是一种层次关系&#xff0c;为 n &#xff08; n ≥ 0 &#xff09; n&#xff08;n≥0&#xff09; n&#xff08;n≥0&#xff09;个节点构成的有限集合&#xff0c;当n0时&#xff0c;称为空树&#xff0c;对于任一…

锁定Mac的内置键盘,防止外接键盘时的误触

场景&#xff1a;把你的外接键盘放在mac上&#xff0c;然后打字时&#xff0c;发现外接键盘误触mac键盘&#xff0c;导致使用体验极差 解决方案&#xff1a;下载Karabiner-Elements这款软件&#xff0c;并给它开启相关权限。 地址&#xff1a;https://github.com/pqrs-org/Ka…

并网逆变器学习笔记6---三电平SVPWM下的连续和不连续调制

之前在学习中总结过一次DPWM策略选择&#xff1a;并网逆变器学习笔记5---三电平DPWM 但是对于三电平逆变器而言&#xff0c;如何从连续调制切换到不连续调制&#xff0c;存在一些疑惑点&#xff0c;下午闲来无事&#xff0c;把SVPWM下的连续调制和不连续调制的开关状态选择&am…

C++实现一个链栈

C实现一个链栈 什么是链栈如何实现链栈链栈的实现开发环境代码实现运行结果 什么是链栈 链栈不名思意&#xff0c;就是既具有链表的特性&#xff0c;又具有栈的特性。 即&#xff1a; 链栈中的元素由指针域和数据域组成&#xff0c;通过指针指向下一个元素&#xff1b;2.链栈同…

软件测试学习:师傅领进门修行看个人

本课程学习导图 2-1 软件测试阶段 1、单元测试 概念&#xff1a; 对软件中的 最小可测试单元 进行检查和验证。 原则&#xff1a; &#xff08;1&#xff09;尽可能测试用例相互独立 &#xff08;2&#xff09;一般由代码开发人员实施 好处&#xff1a;&#xff08;…