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

Java核心技术知识点笔记—集合(二)

1、树集(TreeSet):是一个有序集合(sorted collection),与散列集类似,但比散列集有所改进。

(1)可以以任意顺序将元素插入到集合中;

(2)遍历时,每个值将自动按照排序后的顺序呈现;例如:

        TreeSet<String> treeSet = new TreeSet<>();treeSet.add("B");treeSet.add("A");treeSet.add("C");for (String s : treeSet) {System.out.print(s);System.out.print(",");}}

输出:A,B,C,

(3)排序使用的是树结构(当前使用的是红黑树(red-black tree)),每次插入一个元素,元素都被放置在正确的排序位置上;

(4)迭代器总是以排好序的顺序访问每个元素;

(5)将元素添加到树中比添加到列表中慢,但与检查数组或链表中的重复元素比快很多;

(6)树的排序必须是全序,即任意两个元素必须是可比的,且只有当两个元素相等时结果才为0;

(7)Java SE 6起,TreeSet类实现了NavigableSet接口,这个接口增加了几个便于定位元素以及方向遍历的方法。

2、队列与双端队列:

2.1、双端队列:有两个端头的队列,可以有效地在头部和尾部同时添加或删除元素,不支持在队列中间添加元素。

(1)Java SE 6 中引入Deque接口,并由ArrayDeque和LinkedList实现。这两个类都提供了双端队列,并且可在必要时增加队列长度。

2.2、优先级队列(priority queue):可按照任意顺序插入元素,但总按照排序的顺序进行检索。

(1)并没有对所有的元素进行排序;

(2)使用的数据结构称为堆(heap);

(3)堆是一个可以自我调整的二叉树,对树执行添加和删除操作,可以让最小的元素移动到根,而不必花费时间对元素排序;

(4)典型示例:任务调度。每个任务有一个优先级,任务以随机顺序添加到队列中。每当启动一个新任务,都将优先级最高的任务从队列中删除(由于习惯上将1设为“最高”优先级,所以会删除最小的元素)。

3、映射:存放键/值对,提供键就能查找到值。Java中提供了两个通用的实现:HashMap和TreeMap。

3.1、基本操作

(1)散列或比较函数只能作用于键,与键关联的值不能进行散列或比较。

(2)与集一样,散列稍微快一点。如果不需要按照排列顺序访问键,最好选择散列。

(3)往映射添加对象时(put方法),必须提供一个键。

(4)检索对象(get)必须使用键。如果映射中没有与给定键对应的信息,get将返回null(getOrDefault方法可以让调用者自己提供一个默认值,如果检索没有结果,则返回提供的默认值)。

(5)键必须是唯一的。不能对同一个键存放两个在值。重复对同一个键调用put方法,后面的值会覆盖前面的值。

(6)要迭代处理映射的键和值,最简单的方式是使用forEach方法,提供一个接受键和值的lambda表达式。

(7)remove方法删除映射中给定键对应的元素;

(8)size方法返回映射中的元素数目。

3.2、三种映射视图:键集(Set<K> keySet())、值集合(Collections<V> values(),不是一个集)、键/值对集(Set<Map.Entry<K, V>> entrySet())。

(1)keySet()不是HashSet或TreeSet,而是实现了Set接口的某个类的对象,扩展了Collection接口,可以像使用集合一样使用。例如:

枚举一个映射的所有键:

        Set<String> keySet = map.keySet();for (String key : keySet) {System.out.println(key);}

(2)在键集视图上调用迭代器的remove方法,实际会删除映射中这个键以及与它关联的值;

(3)不能向键集视图增加元素。试图调用add方法会抛出UnsupportedOperationException。

(4)通过枚举键/值对集来同时查看键和值:

       for (Map.Entry<String, String> entry : map.entrySet()) {System.out.println("key: " + entry.getKey());System.out.println("value:" + entry.getValue());}

相关文章:

Java核心技术知识点笔记—集合(二)

1、树集&#xff08;TreeSet&#xff09;&#xff1a;是一个有序集合&#xff08;sorted collection&#xff09;&#xff0c;与散列集类似&#xff0c;但比散列集有所改进。 &#xff08;1&#xff09;可以以任意顺序将元素插入到集合中&#xff1b; &#xff08;2&#xff…...

Sharepoint Online手工迁移方案 | 分享二

目录 前言 1.创建新的目标网站集合 2.备份旧网站集合的内容数据库 3.卸载旧网站集合...

MVC获取当前区域、控制器、Action

控制器中获取&#xff1a; 获取区域名称&#xff1a;RouteData.DataTokens["area"].ToString() 获取控制器名称&#xff1a;RouteData.Values["controller"].ToString() 获取Action名称&#xff1a;RouteData.Values["action"].ToString() 视…...

第十六章 脚手架文件介绍

react项目脚手架文件目录 public ---- 静态资源文件夹 |-------favicon.icon ------ 网站页签图标 |-------index.html -------- 主页面 |-------logo192.png ------- logo图 |-------logo512.png ------- logo图 |-------manifest.json ----- 应用加壳的配置文件 |-------rob…...

基于Clion开发(stm32移植FreeRTOS+LVGL)

嵌入式单片机开发中&#xff0c;通常使用 Keil IAR 或 芯片厂商提供的IDE&#xff0c;这类IDE界面风格还停留在十几年前XP风&#xff0c;代码编辑实在让人难受&#xff0c;所以很多时候笔者都是采用VSCode编辑&#xff0c;然后再用这类IDE下载调试使用&#xff0c;另外像keil 和…...

Python | 蓝桥杯进阶第三卷——动态规划

欢迎交流学习~~ 专栏&#xff1a; 蓝桥杯Python组刷题日寄 蓝桥杯进阶系列&#xff1a; &#x1f3c6; Python | 蓝桥杯进阶第一卷——字符串 &#x1f50e; Python | 蓝桥杯进阶第二卷——贪心 &#x1f49d; Python | 蓝桥杯进阶第三卷——动态规划 ✈️ Python | 蓝桥杯进阶…...

蓝桥杯31天真题冲刺|题解报告|第二十九天

大家好&#xff0c;我是snippet&#xff0c;今天是我们刷题的第二十九天&#xff0c;今天主打打比赛&#xff0c;牛客AcWing力扣&#xff0c;今天的牛客是真的有趣&#xff0c;下面是我今天AcWing周赛的题解 目录 一、热身计算 题目链接&#xff1a;4944. 热身计算 - AcWing题…...

[Rust GUI]fltk-rs的helloworld

1、安装VSCode 下载安装VSCode 安装VSCode扩展 rust-analyzer或rust-analyzer(CN) 2、安装Microsoft C 生成工具 访问微软官网下载生成工具&#xff0c;勾选使用 C 的桌面开发之后会自动勾选5个项目 取消勾选以下项目 用于 Windows 的 C CMake 工具 测试工具核心功能 - 生成…...

蓝桥杯真题05

重新排序 问题描述 给定一个数组 A 和一些查询 Li,Ri 求数组中第 Li 至第 Ri个元素之和。 小蓝觉得这个问题很无聊, 于是他想重新排列一下数组, 使得最终每个查询结果的和尽可能地大。小蓝想知道相比原数组, 所有查询结果的总和最多可以增加多少? 输入格式 输入第一行包含…...

PMP那些事儿,备考小白看过来

一、PMP是什么&#xff1f; PMP指的是项目管理专业人士资格认证。它是由美国项目管理协会(Project Management Institute(PMI)发起的&#xff0c;严格评估项目管理人员知识技能是否具有高品质的资格认证考试。 其目的是为了给项目管理人员提供统一的行业标准。目前&#xff0…...

【数据分析实战】基于python对酒店预订需求进行分析

文章目录&#x1f4da;引言&#x1f4d6;数据加载以及基本观察&#x1f4d1;缺失值观察及处理&#x1f516;缺失值观察以及可视化&#x1f516;缺失值处理&#x1f4d6;用户数据探索&#x1f4d1;什么时间预定酒店将会更经济实惠&#xff1f;&#x1f4d1;哪个月份的酒店预订是…...

【新2023Q2模拟题JAVA】华为OD机试 - 数组的中心位置

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:数组的中心位置 题目 给你一…...

Vue的props组件详解

const props defineProps({name: String, }); String 是在 defineProps() 函数中用来声明 name prop 的类型&#xff0c;表示 name 必须是字符串类型。如果父组件没有传入 name 或传入的 name 不是字符串类型&#xff0c;那么就会产生类型验证错误。 defineProps() 函数支持…...

抽烟行为识别预警系统 yolov5

抽烟行为识别预警系统基于yolov5网络模型智能分析技术&#xff0c;抽烟行为识别预警算法通过监测现场人员抽烟行为自动存档进行报警提示。我们选择当下YOLO卷积神经网络YOLOv5来进行抽烟识别检测。6月9日&#xff0c;Ultralytics公司开源了YOLOv5&#xff0c;离上一次YOLOv4发布…...

【0基础学爬虫】爬虫基础之文件存储

大数据时代&#xff0c;各行各业对数据采集的需求日益增多&#xff0c;网络爬虫的运用也更为广泛&#xff0c;越来越多的人开始学习网络爬虫这项技术&#xff0c;K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章&#xff0c;为实现从易到难全方位覆盖&#xff0c;特设【0基础学…...

airflow源码分析-任务调度器实现分析

Airflow源码分析-任务调度器实现分析 概述 本文介绍Airflow执行器的总体实现流程。通过函数调用的方式说明了Airflow scheduler的实现原理&#xff0c;对整个调度过程的源码进行了分析。 通过本文&#xff0c;可以基本把握住Airflow的调度器的运行原理主线。 启动调度器 可…...

一文学会数组的reduce()和reduceRight()

reduce()方法和reduceRight()方法依次处理数组的每个成员&#xff0c;最终累计为一个值。 它们的差别是&#xff0c;reduce()是从左到右处理&#xff0c;reduceRight()则是从右到左&#xff0c;其他完全一样。 [1, 2, 3, 4, 5].reduce(function (a, b) {console.log(a, b);ret…...

登录校验-Filter

上一篇介绍完了基础应用和细节&#xff0c;现在来完成登录校验功能基本流程&#xff1a; 要进入后台管理系统&#xff0c;必须完成登录操作&#xff0c;此时就需要访问登录接口Login。登录成功服务端会生成一个JWT令牌&#xff0c;并且返回给前端&#xff0c;前端会将JWT令牌存…...

C C++ Java python 分别写出不同表白girlfriend的爱心动态代码实现

C `` #include <stdio.h> #include <stdlib.h> #include <windows.h> void heart_animation() {int i, j, k; for (i = 1; i <= 6; i++) {for (j = -3; j <= 3; j++) {for (k = -4; k <= 4; k++) {if (abs(j) + abs(k) < i * 2) {printf(“I”)…...

ThreeJS-投影、投影模糊(十七)

无投影&#xff1a; 完整的代码&#xff1a; <template> <div id"three_div"></div> </template> <script> import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/Or…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...