一篇了解三大集合的特点

整理笔记——二极管 二极管是一种由半导体材料制成的一种具有单向导电性能的电子元器件,二极管的核心是PN结。加在二极管两端的电压和通关的电流被成为,二极管的伏安特性曲线​​​二极管的正向特性:起初正向电压较小时,正向电流几乎没有,称之为死区,此时二极管处于截止状态。当电压差超过截止电压(0.5V或者0.7V),电流随着电压上升,开始增加缓慢,随后急剧增大,二极管的电阻变小进入导通状态,此时电压变化较小。二极管的反向特性:起初反向电流很小,不随电压二变化,此时成为反向饱和电流;当方向电压达到二极管的反向击穿电压。 阅读详情

集合

集合的前提:数据结构

  1. 动态数组
    在这里插入图片描述

    特点:查询和修改开,增加和删除相对较慢

    特殊点:数组的初始长度默认为10,如果长度不够了,则会新建一个新的长度,然后通过copy方法把原有的数据搬到新的数组中,这个过程成为扩容。扩容的扩容算法就是(当前数组长度*3)/2+1

    为什么查改快、增删慢?

    因为数组有下标,我们可以通过下标直接找到;

    因为我们的数组是一个连续的块型内存,增加和删除都是要改变数组的长度,从而使得后面的数据都需要进行移动,他就是慢在这个移动数据上

  2. 链表

在这里插入图片描述

特点:增加删除快,查询和修改慢

为什么增删快,修改慢?

因为链表中的数据只需要指向下一个数据就可以了,所以查询和修改的方式就需要从头开始挨个找,

增删就是只需要修改一下上一个的指向修改数据和修改数据指向下一个即可,如果修改数据时删除的话,就直接上一个指向下一个

  1. 红黑树

在这里插入图片描述

简介:红黑树是一个平衡二叉查找树,此处需要你去百度了解一下红黑树的

红黑树特性:

特性1:每个节点要么红色要么黑色

特性2:最上面的节点叫根节点,是黑色的

特性3:每个叶子节点如果为Nil就是黑色的

特性4:红色的子节点一定是黑色

特性5:任意一个节点到每个叶子节点的路径都包含同数量的黑色节点

  1. 哈希表(hash表)

    在这里插入图片描述

    特点:增删改查性能都很好的一种数据结构

    哈希表在JDK8前,采用的数组+链表的形式

    JDK8后,采用数组+链表+红黑树的形式

    哈希表存储:根据对象地址计算的int类型的值进行存储

集合分为三种

List、Set和Map

其中List和Set继承了java.utils.Collection接口,而map则是java.utils.map

List

list的显著特点就是 添加元素是有序,可重复,有索引

常用子类:ArrayList、LinkedList

ArrayList:底层数据结构是数组,查询快,增删满,且线程不安全,效率高

LinkedList:底层数据结构是链表,查询慢,增删快,且线程不安全,效率高

Vector:底层数据结构是数组,查询快,增删慢,且线程安全,效率低

对比

Vector和ArrayList区别

相同:底层数据结构都是数组

不同:Vector因为是线程安全的,所以效率低

​ ArrayList因为线程不安全,所以效率高

ArrayList和LinkedList的区别

ArrayList:底层数组,查询快,增删慢 线程不安全

LinkedList:底层链表,增删快,查改慢 线程安全

如果需要线程安全:

可以用Collections工具类中的synchronizeList为ArrayList加锁,从而变成线程安全的

LinkedList也同上

当然,我们亦可以使用java.util.concurrent下的CopyOnWriteArrayList替代Arraylist

Set

特点:添加元素无序、不重复,无索引

常用:HashSet、TreeSet

HashSet:无序、不重复、无索引;

ListedHashSet:有序,不重复,无索引;底层数据结构为hash表,但是采用的双链表

TreeSet:按照大小默认升序排序、不重复、无索引;排序也可根据字符串首个字符编号升序

HashSet1.7版本原理解析:数组+链表+(结合哈希算法)
  1. 创建一个默认长度为16的数组,数组名为table
  2. 根据元素的哈希值跟数组的长度求余计算出应存入的位置(哈希算法)
  3. 判断当前位置是否为null,如果是null直接存入
  4. 如果位置不为null,表示有元素,则会调用equals方法比较
  5. 如果一样,则不存,如果不一样,则存储数组
    1. JDK7新元素指向老元素位置,指向老元素
    2. JDK8中寻元素放在老元素下面
  6. 当前挂在同意索引下的元素如果过多的时候,查询性能降低,从JDK8起,当链表长度超过8的时候,会自动转换为红黑树
  7. 当数组存满(数组长度*0.75)的时候,会自动扩容,每次扩容原先的两倍

结论:

  1. 哈希表是一种对增删改查数据性能都较好的结构
  2. 如果希望set认为两个对象的内容完全相同,我们需要重写equals和hashcode方法

以上使用情况

  1. 如果希望元素可以重复,又有索引,索引查询要快
    1. 使用ArrayList集合,基于数组的(使用最多)
  2. 如果希望元素可以重复,又有索引,增删首尾要快
    1. 使用LinkedList集合,基于链表
  3. 如果希望增删改查都快,但是元素不能重复,且无索引,无序
    1. 使用HashSet集合,基于哈希表的
  4. 如果希望增删改查都快,但是元素不能重复,且无索引,有序
    1. 用LinkHashSet集合,基于哈希表的双链表
  5. 如果要对对象进行排序
    1. 用TreeSet集合,基于红黑树,后续也可以用List集合实现排序

Map

Map是双列集合的祖宗接口,他的功能是双列集合都可以继承使用的

特点:键值对

HashMap

特点:HashMap是Map里面的一个实现类,特点都是由键决定的:无序、不重复、无索引

实际上:Set系列集合的底层就是Map实现的,只是Set集合中的元素只要键数据,不要值数据而已

LinkedList

特点:由键决定是否有序,不重复,无索引(此处有序仅保证存入和取出先后顺序一致)

原理:底层hash表,但是多了一个双链表

TreeMap

特点:由键决定特性:不重复,无索引、可排序;(按键排序,默认从小到大)
以上图片资源来源网络;如涉及盗版侵权请联系作者处理

QMT量化交易实战:如何用通达信预警数据自动买卖股票(附完整Python代码) 本文详细介绍了如何利用QMT平台对接通达信预警数据,构建自动化股票交易系统。通过完整的Python代码示例,展示了从数据获取到订单执行的全流程,帮助投资者实现量化交易策略的自动化执行,提升交易效率。 阅读详情

相关推荐

Keil 5安装教程(C51与MDK共存)

目录前言MDK的安装C51的安装安装完成后的验证新建C51工程添加C51程序文件编译测试总结 前言 本篇文章将介绍嵌入式开发工具Keil 5的安装方法,并使MDK(Microcontroller Development Kit,开发stm32时会用到)和C51(51单片机C语言软件开发系统)共存。今后使用Keil 5可同时开发51单片机程序和ARM单片机程序,便于学习与从51到32的过渡。 注: 为防止商业纠纷,本篇文章不涉及文中软件的注册破解,请支持正版。 同时为了便于今后更深入的学习,本文不会介绍软件的

xushu_me的博客 6万+

一起探秘,不可不知双向链表底层原理

LinkList是一个双向链表(双链表);它是链表的一种,也是最常见的数据结构,其内部数据呈线性排列,属于线性表结构.它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点,所以是双向链表.

weixin_39158966的博客 503

MediaCodec视频解码流程详解及参考demo

本文主要讲解mediacodec的视频解码流程,及demo参考例子。

分享音视频技术 7876

LinkedList特点

LinkedList特点和底层实现 LinkedList的特点和存储结构 LinkedList底层用双向链表实现存储 特点:增删效率高,查询效率低,线程不安全 双向链表也叫双链表,是链表的一种,它的每个数据节点都有两个指针,分别指向前一个节点和后一个节点。 LinkedList的存储结构图 节点类的内容 class Node{ Node previous;//指向前一个节点 Node next;//指向后一个节点 Object element;//本节点所存放数据 } ...

weixin_45208757的博客 2243

Debian 11 之使用hostapd与dnsmasq进行AP设置

本文介绍debian 11 系统下,使用hostapd 和 dnsmasq配置无线热点的方法。

xinghaitao2005的博客 1698

深度强化学习算法PPO训练Pendulum

returnadv = 0print('状态空间维度:', state_n)print('动作空间维度:', action_n)steps = []if done:breakif done:breakelse:steps = []if done:break。

weixin_43336108的博客 808

简述ArrayList和LinkedList特点?

简述ArrayList和LinkedList特点

Uaena_Z的博客 776

设计四翼无人机(Quadcopter)的自主降落控制算法

为四翼无人机建立动力学模型,包括其姿态(Pitch, Roll, Yaw)和位置(X, Y, Z)的变化。可以使用Aerospace Blockset中的预制模块,或者根据具体需求构建自定义模型。示例:简化动力学模型利用块模拟四翼无人机的基本行为,确保模型能够反映电机输出如何影响姿态和位置变化。

amy_mhd的博客 243

简述HashMap的特点

简述HashMap的特点 一、HashMap是查询效率最高的数据结构。 二、HashMap的内部是使用数组来存储元素的,元素存放的位置是依据key值的hashcode()方法的返回值经散列算法,生成的下标数字来决定的。所以查询元素时,HashMap会依靠给定的key的hashcode()方法返回值来计算出对应的下标,然后直接通过下标去访问相应的元素,这样就省去了遍历数组的过程。HashMap查询数据时不受元素数量的影响。 三、由于Map的key的唯一性(key的equals()方法比较来决定是否重复)

weixin_44939921的博客 5072

【NLP】第十章:位置编码Positional Encoding

前面讲RNN时一般都会有一个ht的输出,这个输出就是样本与样本之间的信息,而且RNN是时序循环的,所以RNN本身的结构,在物理上,就自带词的前后顺序信息的。比如词never,不管never本身的词向量是什么,只要你在序列中排第一个位置,你的位置向量就是[0,1,01],你排第三个位置,你的位置向量就是[0.9,-0,4,0.2,1.0]。也所以,你可以理解为:embedding后的词嵌入,PE按照每个样本在sequence中的位置,把embedding后的词嵌入给扭转后,才送入attention的。

因为热爱所以坚持 1918

1 初识智能化测试

非常感谢您可以和我一起来聊一聊智能化测试的一些事。智能化测试是一个新鲜又老旧的问题,说新鲜是因为很多人当听到智能化测试都会联想到人工智能、机器学习、深度学习等高大上的技术,很多时候觉得离我们的实际工作还很远;说老旧,是因为智能化测试的一些技术的发展在行业里面已经很久了,例如符号执行、静态分析等技术已经有很长的历史了。近些年,随着测试技术的的飞速发展,智能化测试也有了越来越多的实践,优秀的开源项目慢慢的被行业推行并且落地。那么在这里我们就一起来聊聊智能化测试以及智能化测试好的思路、实践、方法以及技术落地过程。

Criss@陈磊 2626

深入理解hashmap

深入理解hashmap 一,特点: 1 :非线程安全 (注:如果需要满足线程安全,可以用 Collections的synchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap) 2:有很快的访问速度,但遍历顺序却是不确定的 3:HashMap最多只允许一条记录的键为null,但是允许多条记录的值为nulll 二,内部实现: 2.1 从结构上来讲,hashmap 是数组 + 链表 + 红黑树 ( 在jdk1.8 中增加了红黑树部分) 进行实现的

weixin_43843172的博客 1037

Openclaw第3章:进阶部署

本章面向需要在特定环境中稳定运行 OpenClaw 的用户,介绍 Windows、Linux、Docker 以及 Cloudflare Workers 四种进阶部署方式。每种方式各有侧重:Windows 部署适合桌面用户日常使用,Linux 部署适合开发者,Docker 部署适合追求环境隔离的运维场景,Cloudflare Workers 部署则适合希望获得全球边缘网络加速的用户。读者可根据自身环境和需求选择合适的方案,完成本章后可继续阅读第4章了解维护升级流程。

Maynor的博客 1295

三大集合特点

(1)集合的由来? 我们学习的是Java – 面向对象 – 操作很多对象 – 存储 – 容器(数组和StringBuffer) – 数组 而数组的长度固定,所以不适合做变化的需求,Java就提供了集合供我们使用。 (2)集合和数组的区别? A:长度区别 数组固定 集合可变 B:内容区别 数组可以是基本类型,也可以是引用类型 集合只能是引用类型 C:元素内容 数组只能存储同一种类

longtype的博客 3291

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java各种集合以及特点归纳总结

在Java中有List、 Set、 Map三大集合,其中List与Set是继承自Collection,而Map不是。 文末有三大集合的汇总总结,有需要的可以直接拉到文末。 List集合: 1、ArrayList(最常用) 底层是动态数组,故优缺点同数组:查询快,增删慢 线程不安全,效率高 2、LinkedList 底层是链表,(巧记:和数组优缺点互补)查询慢,增删快 线程不安全,效率高 3、Vec...

天射手座的博客 6178

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

三大常用集合

1.Set集合在Java中,Set是一种集合类型,它是一种不允许包含重复元素的集合,每个元素在Set中是唯一的。Set接口的常用实现类有HashSet、TreeSet和LinkedHashSet。

2301_79562326的博客 1357

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

集合的三大接口

(1)集合有两个父接口 Collection、Map(2)Collection有两个子接口 List、set(3)List有两个常见的实现类 ArrayList、LinkedList(4)Set有两个常见的实现类 HashSet、TreeSet(5)Map有两个常见的实现类 HashMap、HashTable。

qq_52500761的博客 1544

JAVA集合三大类

JAVA集合三大类:1.set:set集合无法记住添加的顺序,因此set集合中的元素不能重复 2.list:与数组类似,list集合可以记住每次添加元素的顺序,因此可以根据元素的索引访问list集合中的元素,list集合中的元素可以重复且长度是可变的 3.map集合:每个元素都是key,v alue 键值对组成,可以根据每个元素的key来访问对应的value,map集合中的key不允许重复,va...

weixin_45799690的博客 994

Java中三大集合特点(List,Set,Map)

java中set,list,map三大集合特点归纳List集合1.ArrayList:2.LinkedList:Set集合1.HashSet:2.LinkedHashSet:3.TreeSet:Map集合1.HashMap:2.LinkedHashMap:3.TreeMap: List集合 有序可重复 1.ArrayList: 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 2.LinkedList: 底层数据结构是链表,查询慢,增删快 线程不安全,效率高 get(int)方法只有ArrayLis

chaochao__的博客 412

java中的三大集合入门笔记(简单实用)

一、为什么使用集合框架 如图: 集合的好处: 集合弥补了数组的缺陷,它比数组更灵活更实用,可大大提高软件的开发效率,而且不同的集合适用于不同的场合。 二、Java集合主要分为以下3中类型 Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中 1.List: 三有产品:有顺序,有下标,有重复 2.Set: 三无产品:无顺序,无下标,无重复 3.Map: 键值对:k...

javaboy_yl 2424

Java之三大集合

①  List集合 1.1  ArrayList ArrayList 集合: 可变数组,通过角标操作 增删改查数据 泛型的使用 迭代器的遍历   List集合特点 : 大小不确定、可以存放多种类型、移除数据方便 public class ArrayListDemo { public static void main(String[] args) {

Evil_Kyle的博客 4555

JAVA中的三大集合框架

一、List集合 1、List实现的超级父类接口:Collection   2、了解ArrayList类 A):定义的格式:ArrayList具体类型> 集合名 =  new ArrayList具体类型>();   B):数据的存储方式:底层还是用数组存储   C):对象的类型:在List集合中,如果定义集合对象时没有定义定义对象的类型,就表示什么类型的对象都可以直接存储到Lis

A20160440419的博客 5644

三大集合:List、Map、Set的区别与联系

List、Map、Set的区别与联系 一、结构特点 List和Set是存储单列数据的集合,Map是存储键值对这样的双列数据的集合; List中存储的数据是有顺序的,并且值允许重复;Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的;Set中存储的数据是无顺序的,并且不允许重复,但元素在集合中的位置是由元素的hashcode决定,即位置是固定的(Set集合是根据hashcod...

star_yang的博客 11万+

三大集合-上篇

一.Java中常见集合有哪些? java中常见的集合可以概括如下 1.Map接口和Cllection接口是所有集合框架的父接口 2.collection接口的子接口包括List接口和Set接口 3.Map接口的实现类主要有:HashMap、TreeMap、Hashtable、LinkedHashMap、ConcurrentHashMap以及Properties等 4.LIst的接口主要实现类有ArrayLIst、LinkedLIst、Stack、Vector等 二.HashMap和Hash.

weixin_41874756的博客 370

java中的三大集合类各自的特点以及适用场景

List(列表)结构:由有序的元素序列组成,可以包含重复元素特点:可以通过索引访问元素,插入的顺序与遍历顺序一致常见实现类:ArrayList、LinkedList、VectorMap(映射)结构:由键值对(Key-Value)对组成的集合,键唯一,值可以重复特点:通过键快速查找值,不保证插入顺序,每个键唯一常见实现类:HashMap、TreeMap、LinkedHashMap、HashtableSet(集合)结构:由唯一元素组成的集合。

adru的博客 844

Java 中常用集合的三大接口

Java 中常用集合的三大接口 一、Java.util.Set Set接口是Collection接口的子接口,它是没有重复元素的元素集合,也不能在其中加入相同的元素,而且各元素在该集合中不按特定的方式排序,总的说来就是一个无序无重复的集合。 二、Java.util.List List即是列表,列表在数据结构...

iteye_19287的博客 968
上一篇: 一篇带你熟悉MySQL
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值