数组和集合

数组和集合的区别:

        1、数组固定长度的数据结构,一旦创建长度就无法改变集合动态长度数据结构,可根据需求动态增加或减少元素。

        2、数组包含基本数据类型和对象,而集合只能包含对象

        3、数组可以直接访问元素,而集合需要通过迭代器其他方法访问元素。

常用集合类:
        1、ArrayList:动态数组,实现了List接口,支持动态增长(超限扩容到size+size>>2)。

        2、LinkedList:双向链表,实现了List接口,支持快速插入和删除操作。

        3、HashMap:基于哈希表实现,存储键值对,数组加链表形式,哈希冲突时使用拉链法将冲突的键值对存储到额外维护的链表中

        4、HashSet:基于HashMap实现的Set集合,用于存储唯一元素。

        5、TreeMap:基于红黑树实现的有序Map集合,可以按照键的顺序进行排序。

        6、LinkedHashMap:基于哈希表和双向链表实现的Map集合,保持插入顺序或访问顺序。

        7、PriorityQueue:优先队列,可以按照比较器或元素的自然顺序进行排序。  

List接口

        List是有序的Collection,使用此接口能够精确控制每个元素的插入和删除位置,允许根据索引访问元素。常用的实现类有LinkedList,ArrayList,Vector,Stack。

        ArrayList容量可变非线程安全列表。底层使用数组。实现。每次插入新元素时会检查容量是否充足。扩容时默认创建1.5倍的新数组并进行原数组的复制。ArrayList保留了数组的快速查询特性,但同时也保留了插入和删除速度慢的缺点。

        Vector线程安全的动态数组,内部方法经过synchronzed修饰。扩容时会创建新数组并复制。

        LinkedList:本质是一个双向链表,有更快的插入和删除速度,但查询较慢。

Map接口

        Map是一个键值对集合,存储键、值之间的映射,Key无序且唯一Value不要求有序且允许重复Map并未继承Collection接口,从Map集合检索元素时,只要给出Key就会返回对应的值对象。主要实现有TreeMap,HashMap,LinkedHashMap,CurrentHashMap.

        HashMap:由数组和链表组成,数组是HashMap的存储主体,链表用于解决Hash冲突。每个数组元素指向一个对应的链表。

        “拉链法”:将哈希冲突的键值对存储在数组元素对应的链表中。Java8后链表长度大于阈值(默认为8)后会转化为红黑树,以减少搜索时间

        LinkedHashMap:继承自HashMap。在其基础上增加了一条双向链表,以维护插入元素的顺序。

        TreeMap:红黑树(自平衡的排序二叉树)

        HashTable:线程安全的HashMap(方法使用synchronzed同步锁修饰,锁整表

        ConcurrentHashMap:线程安全的HashMap(使用volatile+CAS或synchronzed同步锁,对每个元素加锁)。put操作时,若Key不存在,则使用CAS操作赋值为当前值,若Key已经存在,则使用synchronzed关键字申请锁,再进行链表的新增操作。

Set接口

        Set不允许存在重复元素,set集合的元素一般是无序的,且不支持通过索引访问。常用的实现有HashSet、LinkedHashSet和TreeSet

        HashSet:基于HashMap实现,HashMap的Key即为HashSet存储的元素,所有Key都使用相同的Value,一个名为PRESENT的Object常量,使用Key保证元素唯一性,但不保证有序性,也不是线程安全(HashMap不是线程安全)。

        LinkedHashSet:继承自HashSet,基于LinkedHashMap实现,使用双向链表维护元素插入顺序。

        TreeSet:基于TreeMap实现,添加元素到集合时按照比较规则将其插入合适的位置,保证插入后的集合仍然有序。

        

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

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

相关文章

WPF MVVM进阶系列教程(一、对话框)

🍠 WPF MVVM进阶系列教程 一、对话框 在前面的文章中,我们介绍了MVVM开发的一些基础知识。 对于日常开发来说,基本已经足够应付大部分场景。 从这里开始,介绍的都是在MVVM模式开发中,提升程序可维护性、灵活性、健壮…

【AI News | 20250507】每日AI进展

AI Repos 1、CFWorkerACME SSL证书助手是一个免费开源的平台,基于Cloudflare Worker运行,旨在自动化SSL证书的申请和下发,尤其适用于多服务器或内网环境。它通过自动化的CNAME和DNS操作完成域名验证,支持Let’s Encrypt、ZeroSSL…

5 分钟用满血 DeepSeek R1 搭建个人 AI 知识库(含本地部署)

最近很多朋友都在问:怎么本地部署 DeepSeek 搭建个人知识库。 老实说,如果你不是为了研究技术,或者确实需要保护涉密数据,我真不建议去折腾本地部署。 为什么呢? 目前 Ollama 从 1.5B 到 70B 都只是把 R1 的推理能力提炼到 Qwen 和 Llama 的蒸馏版本上。 虽说性能是提升…

极狐GitLab 分支管理功能介绍

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 分支 (BASIC ALL) 分支是项目工作树的一个版本。分支是项目开发的基础。当你创建一个新的项目时,极狐GitLab 会为…

基于ASP.NET+MySQL实现待办任务清单系统

基于ASP.NET的ToDoList的设计与实现 一、前言 1.1 实验目的 使学生综合使用所学过的ASP.NET网络编程知识,掌握网络环境程序设计的基本概念;结合实际的操作和设计,巩固课堂学习内容,掌握网络环境编程的特点、原理和技术&#xf…

普通 html 项目引入 tailwindcss

项目根目录安装依赖 npm install -D tailwindcss3 postcss autoprefixer 初始化生成tailwind.config.js npx tailwindcss init 修改tailwind.config.js /** type {import(tailwindcss).Config} */ module.exports {content: ["./index.html"], //根据自己的项目…

汽车免拆诊断案例 | 2015款奔驰C200L车发动机起动延迟

故障现象  一辆2015款奔驰C200L车,搭载274发动机,累计行驶里程约为15.6万km。该车发动机起动延迟,且发动机故障灯异常点亮。 故障诊断  用故障检测仪检测,发动机控制单元中存储有故障代码“P001685 进气凸轮轴(气缸…

[蓝桥杯 2025 省 B] 水质检测(暴力 )

暴力暴力 菜鸟第一次写题解,多多包涵!!! 这个题目的数据量很小,所以没必要去使用bfs,直接分情况讨论即可 一共两排数据,我们使用贪心的思想,只需要实现从左往右的过程中每个检测器相互连接即…

网络接口返回类ResponseEntity

网络接口返回类ResponseEntity 简介方法获取工厂方法ResponseEntity.ok()返回BodyBuilder返回文字信息返回类对象(Spring自动转换为json格式)返回空内容‌ ResponseEntity.notFound()返回HeadersBuilder返回文字信息 status(HttpStatus)返回BodyBuildern…

Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡

Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡 一、Redis的本质与核心价值 1.1 Redis的技术定位 Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,由Salvatore Sanfilippo于2009年创建。它不同于传…

macOS上管理多个Node.js版本

管理工具 fnm 和 nvm nvm:作为最广泛使用的 Node.js 版本管理器,使用 Bash 编写,适用于类 UNIX 环境(如 macOS 和 Linux),也可以通过兼容的 shell(如 WSL)在 Windows 上使用。fnm:(Fast Node Manager)一种较新的、快速…

uDistil-Whisper:低数据场景下基于无标签数据过滤的知识蒸馏方法

uDistil-Whisper: Label-Free Data Filtering for Knowledge Distillation in Low-Data Regimes 会议:2025年NAACL 机构:卡内基梅降大学 Abstract 近期研究通过伪标签(pseudo-labels)将Whisper的知识蒸馏到小模型中&#xff0…

【MySQL】-- 数据库约束

文章目录 1. 什么是数据库约束2. 约束类型3. NOT NULL 非空约束4. DEFALUT 默认值约束5. UNIQUE 唯一约束6. PRIMARY KEY 主键约束6.1 自增主键6.1 一个自增主键包含多个列 7. FOREIGN KEY 外键约束8. CHECK 约束 1. 什么是数据库约束 数据库约束是指对数据库表中的数据所施加…

鸿蒙NEXT开发动画案例2

1.创建空白项目 2.Page文件夹下面新建Spin.ets文件,代码如下: // 接口定义(必须放在使用前) /*** 关键帧动画整体配置参数*/ interface KeyframeAnimationConfig {iterations: number;delay: number; }/*** 单个关键帧动画项*/…

团队协作的润滑剂——GitHub与协作流程

各位代码界的社交恐惧症患者们,今天我们要聊的是如何假装自己很会团队协作——使用GitHub!这就像程序员版的"相亲平台",只不过在这里,你展示的不是自拍和收入,而是代码和commit记录(后者往往更令…

「Mac畅玩AIGC与多模态13」开发篇09 - 基于多插件协同开发智能体应用(天气+名言查询助手)

一、概述 本篇介绍如何在 macOS 环境下,同时接入多个自定义 OpenAPI 插件,实现智能体根据用户请求自动分析,调用天气查询或名言查询服务,完成多功能协同应用开发。 二、环境准备 1. 确认本地开发环境 macOS 系统Dify 平台已部…

react-12父子组件间的数据传递(子传父)(父传子)- props实现

1.子组件调用父组件的函数并传递数据(子传父) 1.1父组件 import React, { Component } from react; import ChildComponent from ./ChildComponent;class ParentComponent extends Component {constructor(props) {super(props);this.state {items: […

Spring Boot 单元测试使用教程(仅供参考)

单元测试是软件开发中至关重要的一环&#xff0c;Spring Boot 提供了强大的测试支持。以下是 Spring Boot 单元测试的详细教程。 1. 准备工作 1.1 添加测试依赖 在 pom.xml 中添加测试相关依赖&#xff1a; <dependency><groupId>org.springframework.boot</…

React Hooks速成

1、useReducer 适用情况为对一个状态多种复杂操作,通俗的讲就是比如对count这个变量加减乘除的各种情况 改造前 import { useState } from "react";function App() {//计数器const [count, setCount] useState(0);const handleIncrement () > {setCount(coun…

k8s node 内存碎片化如何优化?

在 Kubernetes 集群中&#xff0c;内存碎片化&#xff08;Memory Fragmentation&#xff09;会导致系统无法分配连续的内存块&#xff0c;即使总内存充足&#xff0c;也可能触发 OOM&#xff08;Out of Memory&#xff09;或影响性能。以下是针对 k8s Node 内存碎片化的优化策略…