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 : …...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
