当前位置: 首页 > news >正文

49天精通Java,第24天,Java链表、散列表、HashSet、TreeSet

在这里插入图片描述

目录

    • 一、链表
    • 二、散列表
    • 三、HashSet
    • 四、TreeSet
    • 五、TreeSet常用方法

大家好,我是哪吒。

一、链表

从数组中间删除一个元素开销很大,其原因是向数组中插入元素时,此元素之后的所有元素都要向后端移动,删除时也是,数组中位于被删除元素之后的所有元素都要向数组的前端移动。

在这里插入图片描述

此时,在Java中,可以通过链表解决这个问题。

数组是在连续的存储位置上存放对象引用,而链表则是将每个对象存放在单独的链接link中。每个链接还存放着序列中下一个链接的引用。在Java中,所有的链表都是双向链接,即每个链接还存储前驱的引用。

在这里插入图片描述

在链表中新增、删除一个元素是很轻松的操作,只需要更新锁删除元素前后对应的链接即可。

在这里插入图片描述
有的同学可能觉得上面两个图,没啥区别,其实就是前后链接指向的问题,so easy。

在Java中,可以使用双指针法来向链表中间添加元素。

ListNode newNode = new ListNode(val);  
if (head == null) {  head = newNode;  
} else {  ListNode curr = head;  while (curr.next != null && curr.next.next != null) {  curr = curr.next;  }  curr.next = newNode;  
}

在上面的代码中,我们首先创建一个新的节点newNode,并将其插入到链表的中间。如果链表为空,则将新节点设置为头部节点。否则,我们遍历链表,找到最后一个节点,并将新节点插入到该节点的后面。

二、散列表

如果想要查找某个元素,但又不知道它的存储位置,此时,就需要遍历所有元素,直到找到匹配的元素为止。如果集合中包含的元素很多,就需要耗费很长时间时间。

此时,散列表闪亮登场。

散列表可以快速的查找对象,散列表为每个元素计算一个整数,称为散列码,散列码是以某种方式由对象的实例字段得出的一个整数,可以保证不同的数据对象拥有不同的散列码。

在Java中,删列表实现为链表数组,每个列表被称为桶bucket,可以通过:先计算散列码,再与桶的总数取余,所得到的数就是保存这个元素的那个桶的索引。

可以通过初始化桶数的方式,快速的进行元素插入。

如果装载因子是0.75,当表中已经填到75%就会进行自动再散列,新的桶数就是原来的两倍。对大多数情况而言,装载因子为0.75是比较合理的。

三、HashSet

散列表可以用于实现很多数据结构,最简单的是集类型。

集的add方法会在添加前,在集中进行验证,看是否存在,只有不存在的时候,才会添加这个对象。

Java集合中的集是HashSet类,它是基于散列表实现的一个集。
在这里插入图片描述

  1. boolean add(E e),向Set集合中添加元素,添加成功返回true,否则返回false;
  2. int size(),返回Set集合中的元素个数;
  3. boolean remove(Object o),删除Set集合中的元素,删除成功返回true,否则返回false;
  4. boolean isEmpty(),如果Set不包含元素,则返回 true ,否则返回false;
  5. clear(),删除HashSet中所有元素;
  6. Iterator iterator(),遍历HashSet的迭代器;
  7. boolean contains(Object o),判断是否含有某元素;

四、TreeSet

TreeSet是一个基于红黑树实现的有序集合,可以以任意顺序插入集合,在堆集合进行遍历时,值将自动按照排序后的顺序出现。

public static void main(String[] args) {TreeSet<String> treeSet = new TreeSet<String>();treeSet.add("哪吒编程");treeSet.add("Java");treeSet.add("Love");treeSet.add("CSDN");for(String str : treeSet){System.out.println(str);}}

在这里插入图片描述
TreeSet是通过红黑树进行排序的。

将一个元素添加到TreeSet中要比添加到散列表中慢,因为要进行排序。但与检查HashSet中的重复元素相比,使用树还是要快得多。

五、TreeSet常用方法

在这里插入图片描述

  1. add(Object obj):将一个对象添加到TreeSet中;
  2. remove(Object obj):从TreeSet中移除一个对象;
  3. pollFirst():返回TreeSet中的第一个对象,如果TreeSet为空则返回null;
  4. pollLast():返回TreeSet中的最后一个对象,如果TreeSet为空则返回null;
  5. size():返回TreeSet中元素的个数;
  6. isEmpty():判断TreeSet是否为空;
  7. contains(Object obj):判断一个对象是否在TreeSet中;
  8. addAll(Collection<? extends E> c):将一个Collection对象中的元素添加到TreeSet中;
  9. removeAll(Collection<? extends E> c):从TreeSet中移除一个Collection对象中的元素;
  10. retainAll(Collection<? extends E> c):保留一个Collection对象中的元素,并将它们添加到TreeSet中;

在这里插入图片描述

🏆本文收录于,49天精通Java从入门到就业。

全网最细Java零基础手把手入门教程,系列课程包括:基础篇、集合篇、Java8新特性、多线程、代码实战,持续更新中(每周1-2篇),适合零基础和进阶提升的同学。

🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。

相关文章:

49天精通Java,第24天,Java链表、散列表、HashSet、TreeSet

目录一、链表二、散列表三、HashSet四、TreeSet五、TreeSet常用方法大家好&#xff0c;我是哪吒。 一、链表 从数组中间删除一个元素开销很大&#xff0c;其原因是向数组中插入元素时&#xff0c;此元素之后的所有元素都要向后端移动&#xff0c;删除时也是&#xff0c;数组中…...

HashMap源码分析小结

HashMap相关问题 HashMap实现原理 HashMap是以键值对的形式存储数据&#xff0c;内部是通过数组链表结构实现&#xff0c;在1.7之后的版本&#xff0c;链表结构可以升级为红黑树&#xff0c;提高查询效率 key和value都支持为null&#xff1b;key为null时hash值是0&#xff0…...

太奇怪了!小公司面试全挂,大厂面试全过,为什么小公司要求比大厂还高?...

大厂的人才去小公司面试&#xff0c;一定是降维打击吗&#xff1f;还真未必。一位网友很困惑&#xff1a;真的奇怪&#xff0c;小公司面试全挂&#xff0c;大厂面试10个过了9个&#xff0c;感觉小公司要求比大厂还高&#xff0c;这是怎么了&#xff1f;来看看网友们的看法。有人…...

Java开发环境配置

Java开发环境配置 Java是目前世界上最流行的编程语言之一&#xff0c;它的使用范围广泛&#xff0c;从Web应用程序到桌面应用程序再到移动应用程序&#xff0c;Java都是一种非常有用的语言。想要进行Java开发&#xff0c;首先需要在计算机上配置Java开发环境。 在本文中&…...

大学英语视听说教程(陈向京版本)

词汇题&#xff08;55道&#xff09; 1. You should carefully think over_____ the manager said at the meeting. A. that B. which C. what D. whose 1.选C,考察宾语从句连接词&#xff0c;主句谓语动词think over后面缺宾语&#xff0c;后面的宾语从句谓语动…...

nginx--开源免费

nginx开源免费&#xff0c;支持高性能&#xff0c;高并发的web服务和代理服务软件。 apache,nodejs nginx可以提供的服务&#xff1a; 1、web服务 2、负载均衡&#xff08;反向代理&#xff09;&#xff08;动静分离&#xff09; 3、web cache(web缓存&#xff09; nginx…...

阿里云OSS对象存储

目录 1&#xff1a;OSS 1.1&#xff1a;开通OSS服务 1.2&#xff1a;搭建OSS环境 1.2.1&#xff1a;创建Bucket存储空间 1.2.2&#xff1a;创建文件夹上传图片 1.2.3&#xff1a;RAM访问控制 1.3&#xff1a;快速入门 1.3.1&#xff1a;下载SDK 1.3.2&#xff1a;搭建环…...

基于VHDL语言的汽车测速系统设计_kaic

摘 要 汽车是现代交通工具。车速是一项至关重要的指标。既影响着汽车运输的生产率,又关乎着汽车行驶有没有超速违章&#xff0c;还影响着汽车行驶时人们的人身安全。而伴随着我国国民的安全防范意识的逐步增强&#xff0c;人们也开始越来越关心因为汽车的超速而带来的极其严重…...

【数据结构】单链表(笔记总结)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;数据结构 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&…...

Git操作之 git add 撤销、git commit 撤销

1、git add 添加多余文件 撤销操作 git reset HEAD 后面什么都不跟的&#xff0c;就是上一次add 里面的内容全部撤销 git reset HEAD XXX 后面跟文件名&#xff0c;就是对某个文件进行撤销 2、git commit 撤销操作 git reset --soft HEAD^ 这样就成功的撤销了commit操作 注…...

用PyTorch实现MNIST数据集手写数字识别

资源下载&#xff1a;用Pytorch实现MNIST数据集的手写数字识别介绍资源-CSDN文库 手写数字识别是一项相当普遍的应用&#xff0c;因为在现实生活中&#xff0c;我们经常需要对手写数字进行识别&#xff0c;例如在邮政服务中&#xff0c;我们需要对邮件上的邮政编码进行识别&am…...

leetcode3:无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “…...

ChatGPT让现在的软件都土掉渣了

我们家有两个娃&#xff0c;每次我们想要出去时订个酒店时都好麻烦。我在某程上找&#xff0c;我先看有没有家庭房&#xff0c;但家庭房很少&#xff0c;而且有些家庭房实际上只能睡得下两大一小。普通房间能不能睡得下四个人&#xff0c;那可是得查看很多信息&#xff0c;如床…...

IU5708D低静态电流同步升压DC-DC 控制器

IU5708D是高性能宽输入范围 (4.5V~40V) 同步升压控制器&#xff0c;支持高达52V的输出电压。输出电压采用恒定频率电流模式脉宽调制(PWM) 控制来实现调节。 芯片通过外部定时电阻器或通过与外部时钟信号同步来设置开关频率。在电阻编程模式下&#xff0c;开关频率可从50KHz编程…...

ubuntu查看软件安装路径

ubuntu怎么查看软件安装位置在哪 - 服务器 - 亿速云 1、执行程序查看 在终端使用type执行软件程序查看。 type google-chrome 2、通过进程查看对应的软件程序 在终端使用以下命令查看所有进程名。 ps -e 再使用以下过滤命令查看对应的进程信息即可。 ps aux|grep 软件名 …...

动态规划总结

1&#xff0c;01背包dp&#xff08;每件物品最多选一次&#xff09;&#xff1a; 因为背包为0 的时候&#xff0c;什么都装不了&#xff0c;所以为零 &#xff0c;就是他们的最优解。 最后一个单元格为最后的答案。 01背包模板 public class Knapsack {public static int kn…...

分享:数据库存储与索引技术(一)存储模型与索引结构演变

欢迎访问 OceanBase 官网获取更多信息&#xff1a;https://www.oceanbase.com/ 本文来自OceanBase社区分享&#xff0c;仅限交流探讨。原作者马伟&#xff0c;长期从事互联网广告检索系统的研发&#xff0c;对数据库&#xff0c;编译器等领域也有浓厚兴趣。 文章目录综述传统单…...

ZeusAutoCode代码生成工具(开源)

ZeusAutoCode代码生成工具 一、简介 Zeus代码生成器是一款自动代码生成工具&#xff0c;旨在快速生成基础的CRUD代码&#xff0c;在此基础上也提供了一些高级功能&#xff0c;做到灵活配置&#xff0c;生成可扩展性强的代码。 后端是基于springboot、freemarker、mybatisplu…...

算法题记录

力扣的算法题&#xff1a;1154 给你一个字符串 date &#xff0c;按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。 示例 1&#xff1a; 输入&#xff1a;date “2019-01-09” 输出&#xff1a;9 解释&#xff1a;给定日期是2019年的第九天。 示例…...

章节2 行走数据江湖,只需一行代码

目录6. 函数填充&#xff0c;计算列6.1 excel操作6.2 pandas操作16.3 pandas操作28. 数据筛选、过滤&#xff0c;[绘图前的必备功课]8.1 excel操作8.2 Python操作http://sa.mentorx.net 蔓藤教育6. 函数填充&#xff0c;计算列 书的编号、书的名字、标价、折扣、最终价钱 最终…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢&#xff0c;连接红外测温传感器&#xff0c;可实时精准捕捉宠物体温变化&#xff0c;以便及时发现健康异常&#xff1b;水位检测传感器时刻监测饮用水余量&#xff0c;防止宠物…...