JAVA集合专题3 —— vector + LinkedList + Set
目录
- vector的特点
- LinkedList底层结构
- 模拟双向链表
- 比较ArrayList和LinkedList
- Set接口
- 基本介绍
- Set接口的遍历方式
- Set接口实现类对象的特点
- Set接口实现类HashSet
- 模拟HashSet/HashMap的底层结构
vector的特点
- Vector底层是一个对象数组
- Vector是线程同步的,即线程安全的,Vector类的操作方法带有synchronize(带锁也就意味着效率有所降低)
LinkedList底层结构
- LinkedList底层实现了双向链表和双端队列
- 可以添加任意元素(元素可以重复),包括null
- 线程不安全,没有实现同步
- LinkedList中维护了两个属性first和last,分别指向首结点和尾结点
- 每个节点(Node对象)里面又维护了prev、next、item三个属性,其中通过prev指向前一个结点,通过next指向后一个结点。最终实现双向链表

模拟双向链表
package cs.kaoyan.javase.com.list7;public class Test4 {public static void main(String[] args) {Node zs = new Node("zhang san");Node ls = new Node("li si");Node ww = new Node("wang wu");//zs -> ls -> wwzs.next = ls;ls.next = ww;//zs <- ls <- wwww.prev = ls;ls.prev = zs;//设置头结点Node first = zs;//设置尾结点Node last = ww;//从头到尾遍历双向链表//zhang san -> li si -> wang wu//一般不直接对头结点进行操作Node temp1 = first;while (true){if (temp1 == null){//遍历结束break;}System.out.println(temp1.item);temp1 = temp1.next;}System.out.println("-------------");//从尾往头遍历//wang wu -> li si -> zhang sanNode temp2 = last;while (true){if (temp2 == null){//遍历结束break;}System.out.println(temp2.item);temp2 = temp2.prev;}//模拟插入操作//zhang san -> li si -> zhao liu -> wang wuNode zl = new Node("zhao liu");zl.next = ww;zl.prev = ls;ls.next = zl;ww.prev = zl;System.out.println("-------------");//再次从头到尾遍历//zhang san -> li si -> zhao liu -> wang wuNode temp3 = first;while (true){if (temp3 == null){//遍历结束break;}System.out.println(temp3.item);temp3 = temp3.next;}}
}class Node{public Object item;//存放数据public Node prev;//指向前一个结点public Node next;//指向后一个结点//单参构造方法public Node(Object item) {this.item = item;}
}
比较ArrayList和LinkedList

- 如果我们改查的操作多,选择ArrayList(底层结构决定改查的效率)
- 如果我们增删的操作多,选择LinkedList3
- 一般来说,在程序中,80% ~ 90%都是查询,因此大部分情况下会选择ArrayList
- 在一个项目中,根据业务灵活选择,可以一个模块使用的是ArrayList,另外一个模块是LinkedList
Set接口
基本介绍
- 无序(添加和取出的顺序不一致)
- 没有索引不允许重复元素
- 最多包含一个null(不允许元素重复)
- 和List接口一样,Set接口也是Collection的子接口,因此常用方法和Collection接口一样
Set接口的遍历方式
同Collection的遍历方式一样,因为Set接口是Collection接口的子接口
- 可以使用迭代器遍历
- 增强for遍历
- 不能使用索引的方式来遍历
Set接口实现类对象的特点
- Set接口的实现类的对象(Set接口对象),不能存放重复的元素,可以添加一个null
- Set接口对象存放数据是无序(即添加的顺序和取出的顺序不一致)
- 取出的顺序虽然不是添加的顺序,但是他的固定,在元素固定的时候不会改变
- 总结:无序且唯一
package cs.kaoyan.javase.com.set;import java.util.HashSet;public class Test {public static void main(String[] args) {HashSet set = new HashSet();set.add("zhang san");set.add("li si");set.add("wang wu");set.add("wang wu");set.add("zhao liu");set.add("zhao liu");set.add(null);for (int i = 0; i < 10; i++) {System.out.println(set);}
/*
[null, wang wu, zhang san, li si, zhao liu]
[null, wang wu, zhang san, li si, zhao liu]
[null, wang wu, zhang san, li si, zhao liu]
[null, wang wu, zhang san, li si, zhao liu]
[null, wang wu, zhang san, li si, zhao liu]
[null, wang wu, zhang san, li si, zhao liu]
[null, wang wu, zhang san, li si, zhao liu]
[null, wang wu, zhang san, li si, zhao liu]
[null, wang wu, zhang san, li si, zhao liu]
[null, wang wu, zhang san, li si, zhao liu]*/}
}
Set接口实现类HashSet
- HashSet实现了Set接口
- HashSet实际上是HashMap
public HashSet() {map = new HashMap<>();
}
- 可以存放null值,但是只能有一个null
- HashSet不保证元素是有序的
- 不能有重复元素
模拟HashSet/HashMap的底层结构
package cs.kaoyan.javase.com.set;/*** 模拟HashSet/HashMap的底层结构*/
public class Test2 {public static void main(String[] args) {//创建一个数组,类型是NodeNode[] table = new Node[5];//新建一个"张三"结点Node zs = new Node("zhang san", null);//数组下标为1的位置指向张三table[1] = zs;Node ls = new Node("li si", null);zs.next = ls;Node ww = new Node("wang wu", null);ls.next = ww;Node zl = new Node("zhao liu", null);ww.next = zl;}
}class Node{Object item;//存放数据Node next;//指向下一个结点//构造器public Node(Object item, Node next) {this.item = item;this.next = next;}
}

相关文章:
JAVA集合专题3 —— vector + LinkedList + Set
目录vector的特点LinkedList底层结构模拟双向链表比较ArrayList和LinkedListSet接口基本介绍Set接口的遍历方式Set接口实现类对象的特点Set接口实现类HashSet模拟HashSet/HashMap的底层结构vector的特点 Vector底层是一个对象数组Vector是线程同步的,即线程安全的&…...
Scout:一款功能强大的轻量级URL模糊测试与爬取工具
关于Scout Scout是一款功能强大的轻量级URL模糊测试与爬取工具,可以帮助广大研究人员进行URL模糊测试,并爬取目标Web服务器中难以扫描发现的VHSOT、文件和目录等资源。 项目中包含了一个完整的字典文件,并尽可能地提供了更多的便携性&#…...
leaflet 解决marker呈现灰色边框的问题
第052个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet示例中处理marker外面有灰色边框的问题,请看未处理会后的图片。 处理后的结果非常满意,不再显示灰色边框。处理方法参考源代码。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意…...
MySQL JSON类型字段的查找与更新
MySQL 提供了丰富的函数用于 JSON 类型字段的查找与更新,详见官方文档。 创建一个表 t1,basic_info 字段为JSON类型: CREATE TABLE t1 (id int(11) NOT NULL AUTO_INCREMENT,basic_info json DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CH…...
element Ui树状图控件 spring boot Vue 实现角色授权功能
目录 前言: 二. element ui 2.1官网提供的核心代码 三.表结构 编辑 四.后端 4.1功能分析 4.2实体类 4.3 查询全部权限显示的结果 4.2修改角色权限的后台方法 五.vue 5.0代码总览 5.1树形图 5.2所需要的绑定数据 5.3所需方法 前言: 先上图…...
已解决sc delete MongoDB卸载MongoDB拒绝访问。
已解决sc delete MongoDB卸载MongoDB拒绝访问。 文章目录报错问题报错翻译报错原因解决方法联系博主免费帮忙解决报错报错问题 粉丝群里面的一个小伙伴遇到问题跑来私信我,想卸载MongoDB数据库,但是发生了报错(当时他心里瞬间凉了一大截&…...
python的opencv操作记录11——阈值分割
文章目录传统图像处理分割阈值分割一个应用场景opencv库中的阈值分割固定阈值THRESH_OTSU 大津法阈值自适应阈值传统图像处理分割 现在提到图像分割,很多人会直接想到当前火爆的深度学习的各种分割网络,比如实例分割,语义分割等。其实在传统…...
Python-项目实战--飞机大战-英雄登场(7)
目标设计英雄和子弹类使用pygame.key.get_pressed()移动英雄发射子弹1.设计英雄和子弹类1.1英雄需求游戏启动后,英雄出现在屏幕的水平中间位置,距离屏幕底部120像素英雄每隔0.5秒发射一次子弹,每次连发三枚子弹英雄默认不会移动,需…...
寒假安全作业nginx-host绕过实例复现
1.测试环境搭建 LNMP架构的话,肯定就是linux、nginx、mysql、php四大组件。在后面的复现中我们还会用到https的一部分知识,故这里的nginx就需要使用虚拟主机并且配置https证书,且具有php解析功能。 1.1 基础nginx配置 #1.创建web目录 mkdir …...
RocketMQ-消息消费模式 顺序消费
RocketMQ-消息消费模式 顺序消费RocketMQ-消息消费模式集群模式集群模式的演示(本身就默认)Rocketmq存储队列广播模式顺序消费如何改实现顺序消费RocketMQ-消息消费模式 集群模式 在消费模式为集群的情况下,如果机器是集群的,消息只会给集群中的其中一台机器消费到 集群模…...
一、Java并发编程之线程、synchronized
黑马课程 文章目录1. Java线程1.1 创建和运行线程方法一:Thread方法二:Runnable(推荐)lambda精简Thread和runnable原理方法三:FutureTask配合Thread1.2 查看进程和线程的方法1.3 线程运行原理栈与栈帧线程上下文切换1.…...
12.hadoop系列之MapReduce分区实践
本文我们学习MapReduce默认分区以及自定义分区实践 当我们要求将统计结果按照条件输出到不同文件(分区),比如按照统计结果将手机归属地不同省份输出到不同文件中(分区) 1.默认Partitioner分区 public class HashPartitioner<K, V> extends Partitioner<…...
有了独自开,一个人就是一个团队
文章目录 简单介绍优点 优秀案例平台福利总结 简单介绍 独自开是一个基于商品与服务交易全流程的PaaS开发平台。对于开发者,独自开可以协助开发者一个人独自开发一套系统。 优点 独自开有独创的分层标准化平台架构,可以满足系统的任何个性化需求。 …...
web期末复习 2023.02.11
文章目录Web 的概念Web 组成用户通过浏览器请求资源的过程:HTML 超文本标记语言CSS插入样式表的方法有三种:对象,类,实例一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:JavaScript 用法什么是 Java Server Pages?JSP 注释JSP 的 J…...
第44章 用户密码实体及其约束规则的定义实现
1 说明: 由当前程序需要兼容实现多种用户密码的加密操作,所以必须把“CustomerPassword”定义为实体类,该类用于用于把加密方式、密钥及其加密后的密码持久化到“CustomerPassword”表中,以便用为用户登录操作提供验证支撑。 如果…...
聊聊并发与锁
持续坚持原创输出,点击蓝字关注我吧1.并发与并行并发可以充分地利用 CPU 资源,一般都会使用多线程实现。多线程的作用是提高任务的平均执行速度,但是会导致程序可理解性变差,编程难度加大。关于对并发与并行的概念,大家…...
开源项目 —— 原生JS实现斗地主游戏 ——代码极少、功能都有、直接粘贴即用
目录 效果如下 目录结构 GameEntity.js GrawGame.js konva.min.js PlayGame.js veriable.js index.html 结语: 前期回顾 卡通形象人物2 写代码-睡觉 丝滑如德芙_0.活在风浪里的博客-CSDN博客本文实现了包含形象的卡通小人吃、睡、电脑工作的网页动画https://…...
Linux第四讲
目录 四、shell脚本 4.1 shell和shell脚本 4.2 脚本语言分类 4.2.1 编译型语言 4.2.2 解释型语言 4.2.3 脚本语言 4.3 shell常见种类 4.3.1 shell分类介绍 4.3.2 查看bash版本 4.3.3 sh和bash的关系 4.4 脚本书写规范 4.4.1 选择解释器 4.4.2 开发规范 4.5 shell…...
Redis 持久化
持久化是指数据写到物理硬盘里,即便程序崩溃、或者电脑重启,依然能够恢复。Redis提供了两种持久化机制:RDB和AOF。 RDB(Redis Database): RDB文件相当于内存快照,保存了某个时间点数据库信息。使用RDB文件恢复很简单,将…...
Python语言零基础入门教程(十三)
Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示: d {key1 : value1, key2 : …...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
