最佳实践(1)

news2024/11/24 9:34:47

1.Java 集合概览

Java 集合,也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于Collection 接口,下面又有三个主要的子接口:ListSetQueue

  • List(对付顺序的好帮手): 存储的元素是有序的、可重复的。
  • Set(注重独一无二的性质): 存储的元素不可重复的。
  • Queue(实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。
  • Map(用 key 来搜索的专家): 使用键值对(key-value)存储,类似于数学上的函数 y=f(x),"x" 代表 key,"y" 代表 value,key 是无序的、不可重复的,value 是无序的、可重复的,每个键最多映射到一个值。

 

2.集合框架底层数据结构总结

先来看一下 Collection 接口下面的集合。

 1.List
  • ArrayListObject[] 数组。
  • VectorObject[] 数组。
  • LinkedList:双向链表
2.Set
  • HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素。
  • LinkedHashSet: LinkedHashSetHashSet 的子类,并且其内部是通过 LinkedHashMap 来实现的。
  • TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)。
3.Map
  • HashMap:JDK1.8 之前 HashMap 由数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。详细可以查看:HashMap 源码分析。
  • LinkedHashMapLinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap 在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。详细可以查看:LinkedHashMap 源码分析
  • Hashtable:数组+链表组成的,数组是 Hashtable 的主体,链表则是主要为了解决哈希冲突而存在的。
  • TreeMap:红黑树(自平衡的排序二叉树)。

3.集合的框架如下

 

ArrayList 和 Array(数组)的区别?

ArrayList 内部基于动态数组实现,比 Array(静态数组) 使用起来更加灵活:

  • ArrayList会根据实际存储的元素动态地扩容或缩容,而 Array 被创建之后就不能改变它的长度了。
  • ArrayList 允许你使用泛型来确保类型安全,Array 则不可以。
  • ArrayList 中只能存储对象。对于基本类型数据,需要使用其对应的包装类(如 Integer、Double 等)。Array 可以直接存储基本类型数据,也可以存储对象。
  • ArrayList 支持插入、删除、遍历等常见操作,并且提供了丰富的 API 操作方法,比如 add()remove()等。Array 只是一个固定长度的数组,只能按照下标访问其中的元素,不具备动态添加、删除元素的能力。
  • ArrayList创建时不需要指定大小,而Array创建时必须指定大小。

区别如下:

arry 

 // 初始化一个 String 类型的数组
 String[] stringArr = new String[]{"hello", "world", "!"};
 // 修改数组元素的值
 stringArr[0] = "goodbye";
 System.out.println(Arrays.toString(stringArr));// [goodbye, world, !]
 // 删除数组中的元素,需要手动移动后面的元素
 for (int i = 0; i < stringArr.length - 1; i++) {
     stringArr[i] = stringArr[i + 1];
 }
 stringArr[stringArr.length - 1] = null;
 System.out.println(Arrays.toString(stringArr));// [world, !, null]

ArrayList 

// 初始化一个 String 类型的 ArrayList
 ArrayList<String> stringList = new ArrayList<>(Arrays.asList("hello", "world", "!"));
// 添加元素到 ArrayList 中
 stringList.add("goodbye");
 System.out.println(stringList);// [hello, world, !, goodbye]
 // 修改 ArrayList 中的元素
 stringList.set(0, "hi");
 System.out.println(stringList);// [hi, world, !, goodbye]
 // 删除 ArrayList 中的元素
 stringList.remove(0);
 System.out.println(stringList); // [world, !, goodbye]

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

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

相关文章

Windows 11 企业版LTSC 2024正式发布(附链接)

随着微软最新正式发布的Windows 11 24H2&#xff0c;同时也带来了大家翘首以盼的Windows 11企业版 LTSC 2024&#xff0c;我们看到了Windows操作系统在企业级稳定性和个人用户体验上的又一次飞跃。虽然LTSC&#xff08;长期服务通道&#xff09;版本主要面向企业用户&#xff0…

RabbitMQ安装(Ubuntu环境)

安装Erlang RabbitMq需要Erlang语⾔的⽀持&#xff0c;在安装rabbitMq之前需要安装erlang # 更新软件包 sudo apt-get update # 安装 erlang sudo apt-get install erlang 查看erlang版本 erl 退出命令 halt( ). 安装RabbitMQ # 更新软件包 sudo apt-get update # 安装 rabbi…

python迭代器和生成器区别是什么

python中迭代器和生成器的区别 1、共同点 生成器是一种特殊的迭代器。 2、不同点 a、语法上&#xff1a; 生成器是通过函数的形式中调用 yield 或&#xff08;&#xff09;的形式创建的。 迭代器可以通过 iter&#xff08;&#xff09; 内置函数创建。 b、用法上&#x…

面试题:Redis(一)

1. redis是单线程还是多线程&#xff1f; 2. IO多路复用听说过么&#xff1f; 3. Redis为什么快&#xff1f; 1. Redis是单线程还是多线程&#xff1f; 版本不同&#xff0c;Redis基于的架构也不同&#xff0c;所以单单问是单还是多线程并不严谨 3.x 之前 redis都是单线程 4.x …

Tianrui Green Shield

Tianrui Green Shield&#xff0c;即天锐绿盾&#xff0c;是一款专注于企业数据防泄密的软件系统。以下是对天锐绿盾的详细介绍&#xff1a; 一、基本信息 产品名称&#xff1a;天锐绿盾&#xff08;又名绿盾信息安全管理软件&#xff09;公司官网&#xff1a;www.drhchina.co…

VM虚拟机安装 CentOS 7.6 部署宝塔面板实操

一、centos下载 进入centos官网下载页面&#xff0c;选择7.6版本&#xff0c;依次点击 tree-》isos-》x86_64/-》CentOS-7-x86_64-DVD-1810.iso 进行下载。 centos官网下载页面&#xff1a; https://wiki.centos.org/Download.html1、打开下载页面 二、配置CentOS 7的网络 1、…

【Java 并发编程】多线程安全问题(上)

前言 虽然并发编程让我们的 CPU 核心能够得到充分的使用&#xff0c;程序运行效率更高效。但是也会引发一些问题。比如当进程中有多个并发线程进入一个重要数据的代码块时&#xff0c;在修改数据的过程中&#xff0c;很有可能引发线程安全问题&#xff0c;从而造成数据异常。 p…

可视化-最小二乘法拟合直线

目录 1、最小二乘法拟合直线 2、需要用到的公式 3、计算各个参数 &#xff0c;得到函数表达式 4、可视化-绘画图像 1、最小二乘法拟合直线 double x[15] {29,34,39,44,49,54,59,64,69,74,79,84,89,94,99}; double y[15] { 0.2989,0.3036,0.3084,0.3133,0.3182,0.3231,0.…

【HTML并不简单】笔记3-你不知道的列表元素和html、body

文章目录 无序列表menuol的其他属性typestart和valuereversed 定义列表dl、dt、ddhtml与body关联性overflow 桌面端和移动端的滚动条 《HTML并不简单&#xff1a;Web前端开发精进秘籍》张鑫旭 笔记 无序列表menu <menu>元素可以看成是<ul>元素的平行替代&#xff…

生成正激波表的代码

k1.4 import math import numpy as np import pandas as pd #Ma1到p之比 def Ma2p(Ma1,k):return 2*k*Ma1**2/(k1)-(k-1)/(k1) def Ma2rho(Ma1,k):return (k1)*Ma1**2/(2(k-1)*Ma1**2) def Ma2T(Ma1,k):return 1/Ma1**2*(2/(k1))**2*(k*Ma1**2-(k-1)/2)*(1(k-1)/2*Ma1**2) def…

【陪诊系统】打包问题

使用vite打包后&#xff0c;点击打开index.html是空白的&#xff0c;然后查阅了一些资料&#xff0c;原来是路径问题 【解决办法】&#xff1a;在vite.config.js中去添加base:‘./’ ok,完美解决&#xff0c;再打开打包好后的index.html可以看到界面了

CoppeliaSim和Matlab建立远程连接教程

CoppeliaSim和Matlab建立远程连接教程 Matlab通过调用CoppeliaSim的远程API和库函数实现远程连接,为实现Matlab和CoppeliaSim的联合仿真做准备。 一、获取并查看版本信息 点击 Help 查看版本信息 使用的CoppeliaSim Edu版本为:4.4.0 位数:64bit 二、拷贝API函数和库文件…

Ngx+Lua+Redis 实时IP黑名单系统

实时黑名单系统&#xff0c;如果用php脚本实现很容易&#xff0c;但是效率惨不忍睹呀。 要想速度快还的在nginx层实现阻塞。如果iptables 层阻塞速度更快&#xff0c;但是黑名单列表如果有更新就必须要重载配置&#xff0c;实现还是有难度的。php管理后台把黑名单ip写入到redis…

【数据分享】全国地级市2000-2022年公路里程数据(Shp/Excel格式)

公路里程是表征城市建设的重要指标&#xff01;我们发现在各省市统计年鉴、经济社会发展统计中有公路里程数据&#xff0c;例如下图为2022年南京统计年鉴中统计的2021年和2020年的南京市公路里程数据&#xff1a; 我们特地从2001-2023年各省级/市级年鉴中汇总整理了全国地级市的…

PCL 将点云的曲率数据保存至txt

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 计算点云曲率 2.1.2 将曲率保存到txt文件 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新…

【论文速看】DL最新进展20241008-多模态、医学图像分割、扩散模型

目录 【多模态】【医学图像分割】【扩散模型】 【多模态】 PaliGemma: A versatile 3B VLM for transfer 研究机构&#xff1a;google 论文链接&#xff1a;https://arxiv.org/pdf/2407.07726 模型及其说明链接&#xff1a;https://huggingface.co/google/paligemma-3b-pt-22…

leetcode68:文本左右对齐

给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff1b;也就是说&#xff0c;尽可能多地往每行中放置单词。必要时可…

RWKV-7 预览版、大量新论文...RWKV 社区 9 月动态速览

欢迎大家收看《RWKV 社区最新动态》第五期&#xff0c;本期内容收录了 RWKV 社区 2024 年 9 月的最新动态。 9 月动态省流版&#xff08;TL;DR&#xff09; RWKV 官方新闻动态 RWKV-7 发布预览版RWKV-7 论文撰写已面向社区开放RWKV 官网上线 Bad Case 收集页面RWKV 中文文档已…

攻防世界---->sherlock

做题笔记。 下载。 单词中出现大写很可疑。因为大写最多出现在开头等。 猜测是隐写术。 进行筛选。 借助python实现 with open(C:\\Users\\Acer\\Downloads\\f590c0f99c014b01a5ab8b611b46c57c.txt, r) as file:text file.read() uppercase_letters [char for char in text…

手撕数据结构 —— 顺序表(C语言讲解)

目录 1.顺序表简介 什么是顺序表 顺序表的分类 2.顺序表的实现 SeqList.h中接口总览 具体实现 顺序表的定义 顺序表的初始化 顺序表的销毁 打印顺序表 ​编辑 检查顺序表的容量 尾插 尾删 ​编辑 头插 头删 查找 在pos位置插入元素 删除pos位置的值 ​…