首页 > 其他分享 >hashmap与hashtable,arraylist与vector

hashmap与hashtable,arraylist与vector

时间:2023-09-01 12:15:14浏览次数:51  
标签:hashmap arraylist vector 线程 hashtable key null

hashmap:

key可以为null,key为null的话,就不会计算hashcode码,直接给了一个0,

hashmap是2倍扩容原来的容量左移一位,

线程不安全,

计算下标不同,hashmap下标是高位与地位的‘&’运算

hashtable:

key以及value都不能为null,value为null会抛异常,hashcode值是根据key来计算的,而null没有hashcode()方法,所以key也不能为null,

扩容是2倍加1,原来的容量左移一位,

线程安全被synchronized修饰

计算下标不同,hashtable下标是取余(也就是%号)

arraylist:

线程不安全

1.5倍扩容

vector:

线程安全被synchronized修饰

扩容不同,vector可以传一个增长因子,不传默认二倍

太老了,不建议使用

标签:hashmap,arraylist,vector,线程,hashtable,key,null
From: https://www.cnblogs.com/lly-rainbow/p/17501145.html

相关文章

  • HashMap 源码分析
    HashMap简介HashMap主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一,是非线程安全的。HashMap可以存储null的key和value,但null作为键只能有一个,null作为值可以有多个JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主......
  • ArrayList 源码分析
    ArrayList简介ArrayList的底层是数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加ArrayList实例的容量。这可以减少递增式再分配的数量。ArrayList继承于AbstractList,实现了List,RandomAcc......
  • HashMap链表树化究竟是怎样的?
    网上一直看到两种说法:1.数组长度大于64且当链表长度>8时,链表转换为红黑树;2.数组长度大于64且当链表长度≥8时,链表转换为红黑树。 上源码,主要是putVal()函数/***ImplementsMap.putandrelatedmethods.**@paramhashhashforkey*@paramkeythekey*@par......
  • ArrayList源码阅读之EMPTY_ELEMENTDATA和DEFAULTCAPACITY_EMPTY_ELEMENTDATA区别
    /***Sharedemptyarrayinstanceusedforemptyinstances.*/privatestaticfinalObject[]EMPTY_ELEMENTDATA={};/***Sharedemptyarrayinstanceusedfordefaultsizedemptyinstances.We*distinguishthisfromEMPTY_ELEMENTDATAtoknowhowmuchtoi......
  • ArrayList两个对象之间的赋值
    错误的赋值:list1=list2;这种方法只是将list2的地址赋值给了list1。原先对象会被垃圾回收机制回收掉。正确的赋值:List<String>list1=newArrayList<String>();//方法一:利用集合自带的构造方法List<String>list2=newArrayList<String>(list1);//方法二:利用克隆的方......
  • vector 动态添加
    #include<iostream>#include<vector>#include<string>#include<algorithm>intmain(){std::vector<std::string>myVector;//创建一个空的vector<string>std::stringinput;std::cout<<"请输入字符串(输入exi......
  • 【C++STL基础入门】vector运算和遍历、排序、乱序算法
    @TOC前言C++标准库提供了丰富的容器和算法,其中vector是最常用的容器之一。它以动态数组的形式存储元素,并提供了许多方便的运算符和算法来操作和处理数据。本文将介绍vector的基本运算、遍历方法、排序算法以及乱序算法。通过学习这些内容,您将能够更加灵活、高效地使用vector容器。......
  • ConcurrentHashMap存null的讨论
    ConcurrentHashMap存null的讨论参考:https://juejin.cn/post/7057696800739688479今天发现某公众号推送了ConcurrentHashMap为什么不允许存储key|value为null感觉写的有问题,好像是从互联网上抄的,于是做了搜索,发现上面参考给出的结论比较靠谱,核心还是二义性。即当存入<@Not......
  • ConcurrentHashMap为何不能插入null?HashMap为何可以?
    归纳来说就是两个问题:1.ConcurrentHashMap为什么key和value不能为null?2.ConcurrentHashMap能保证复合操作的原子性吗?1.ConcurrentHashMap为什么key和value不能为null?ConcurrentHashMap的key和value不能为null主要是为了避免二义性。null是一个特殊的值,表示......
  • 【openEuler创新项目探索】一个Java端的向量化BLAS库VectorBLAS
    VectorBLAS简介VectorBLAS是一个使用Java语言实现的向量化BLAS高性能库,目前已在openEuler社区开源。VectorBLAS通过循环展开、矩阵分块和内存布局优化等算法优化,对BLAS函数进行了深度优化,并利用VectorAPIJDK提供的多种向量化API实现。可以理解为:VectorBLAS=VectorAPI+BLAS......