精华内容
下载资源
问答
  • HashMap允许null用作 也允许将null作为
    千次阅读
    2018-09-07 01:11:00

    HashMap不能保证元素的顺序,HashMap能够将键设为null,也可以将值设为null

    与之对应的是Hashtable,(注意大小写:不是HashTable),Hashtable不能将键和值设为null,否则运行时会报空指针异常错误;

    HashMap线程不安全,Hashtable线程安全

    转载于:https://www.cnblogs.com/wwb0811/p/9602157.html

    更多相关内容
  • 先说结论:hashmap允许多个null值和一个null键,hashtable不允许有任何null值和null键 基于jdk1.8源码分析: 我们都知道Map作为集合中比较重要的键值对集合,key不能重复,所以可以初步判断hashmaphashtable都不...

    项目场景:

    即使不跳槽也要多去看看面试题,学习底层源码
    先说结论:hashmap允许多个null值和一个null键,hashtable不允许有任何null值和null键


    基于jdk1.8源码分析:

    我们都知道Map作为集合中比较重要的键值对集合,key不能重复,所以可以初步判断hashmap和hashtable都不能同时拥有多个null键。
    先看hashmap

     public V put(K key, V value) {
            return putVal(hash(key), key, value, false, true);
        }
        //使用本类的putVal方法去执行底层操作(这个底层等在hashmap源码中再研究,此次研究hash(key)这个方法)
        //如果key为null,则默认为0,顺便说下这个异或运算。
        //当去获取一个hash值时,要去和hash的高位去做一个异或运算是为了保证散列的均匀性。
        //其中hash值底层实现是用了一个质数31去获取。
        //第一是质数能减少hash冲突,第二是31可以被jvm优化,底层有个公式31 * i = (i << 5) - i
     static final int hash(Object key) {
            int h;
            return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
        }
        
    

    get操作同样用到hash()
    所以hashmap允许一个null键,和多个NULL值


    再看hashtable

     public synchronized V put(K key, V value) {
            // Make sure the value is not null
            if (value == null) {
                throw new NullPointerException();
            }
    
            // Makes sure the key is not already in the hashtable.
            Entry<?,?> tab[] = table;
            //此处是不为null键的原因
            int hash = key.hashCode();
            int index = (hash & 0x7FFFFFFF) % tab.length;
            @SuppressWarnings("unchecked")
            Entry<K,V> entry = (Entry<K,V>)tab[index];
            for(; entry != null ; entry = entry.next) {
                if ((entry.hash == hash) && entry.key.equals(key)) {
                    V old = entry.value;
                    entry.value = value;
                    return old;
                }
            }
    
            addEntry(hash, key, value, index);
            return null;
        }
    

    这里先看一半,在put操作时,首先判断值是否为null,如果是null则跑出空指针异常,所以hashtable不允许null值。
    再往下来
    int hash = key.hashCode();此处如果key为null也会报空指针异常
    所以总结hashtable不允许任何null值和null建

    展开全文
  • 代表协会中国咨询中华组织工程共和国正人民入F式加。 的专下列现代体系业方有(咨询工程方法法的属于。... 来源:本文由教师资格题库 考研课题库网原创撰写,欢迎分享本文,转载请保留出处链接! 分享:

    包括兑换等过、转帐、程付款,笔交电子的任何一易商务,的转移过主要资金其中程是指。

    代表协会中国咨询中华组织工程共和国正人民入F式加。

    的专下列现代体系业方有(咨询工程方法法的属于。

    745644.jpg

    对应的是验证验证指标手段,划分可按验证方法,平逻在逻辑框架水辑层次上。

    的特点是下列选聘合同框架咨询工程符合服务方式。

    会都员协应遵有(准则C成所有守的。

    往往问题多在到的现许会出合同预见议而引中未起争,当事)等合同以采用(争议决双人可方式方的来解,在工程实程施过。

    围内对于电加的风应采用(前后管绝)材热器热层m范料。

    7456442.jpg

    不包定压系统括(热水方式。

    误所的索赔属图纸引起于()原因、技范错设计术规。

    艺中在煤气干氰工法脱硫脱,度为作温其操。

    的依控制括(据包成本施工。

    万元万元屋收万元万元0万度取得如的投下收销售、销(系某服、投投资业2益1益)元8年内被装生自产租房资收资收赠收角余、接企业产企、出从境入:入3入2入5服装分回料收收入售边受捐,为()万得额应纳元年度则该企业税所,0万0万务招万元0万0万8万外支万元的业待费销售销售性捐元、元(元、元、营业元、营业赠支及税金:及附加5其中管理规定公益成本成本超过财务出为出1如下发生费用费用费用费用税法税金。

    不得的有下列扣除支出,额时纳税计算企业所得税应所得,根据规定。

    万元用纳额为年管整金计算理费税调。

    的确定中的是下列依据正确计税契税。

    编制目的于建程项任务设计书属设工。

    标是的最项目控制终目进度施工。

    不是的特点的以下建设工程是(。

    来源:本文由教师资格题库 考研课题库网原创撰写,欢迎分享本文,转载请保留出处和链接!

    分享:

    展开全文
  • HashMap允许一个 null键,多个 null,而 Hashtable不允许键和值为null。 从下图可以看到 HashMap 对 null 做了特殊处理: 但是 Hashtable 会在我们 put 空值的时候直接抛出空指针异常,如下图: 不过更详细的...

    HashMap允许一个 null键,多个 null值,而 Hashtable不允许键和值为null。
    从下图可以看到 HashMap 对 null 做了特殊处理:
    在这里插入图片描述
    但是 Hashtable 会在我们 put 空值的时候直接抛出空指针异常,如下图:
    在这里插入图片描述
    不过更详细的原因是因为 Hashtable 采用了安全失败机制(fail-safe),导致当前得到的数据不一定是集合最新的数据。
    如果使用null值,就不能判断到底是映射的value是null,还是因为没有找到对应的key而为空,因为你无法再调用contain(key)来对key是否存在做判断,ConcurrentHashMap同理。在多线程情况下,即便此刻你能通过contains(key)知晓了是否包含null,下一步当你使用这个结果去做一些事情时可能其他并发线程已经改变了这种状态,而这对于用于单线程状态的hashmap是不可能发生的,它可以用contains(key) 去判断到底是否包含了这个null,从而做相应处理。

    展开全文
  • 1.HashMap支持null键和nullJSE6.0描述:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)...
  • Map主要用于存储健对,根据得到,因此不允许键重复(重复会覆盖),但允许值重复。 Hashmap是一个最常用的Map,它根据的HashCode存储数据,根据可以直接获取它的,具有很快的访问速度。遍历时,...
  • java中的hashMap允许key为null的原因

    千次阅读 2021-10-04 17:36:40
    java中的hashMap允许key为null的原因 一、首先看看为什么hashTable不允许key为空 public synchronized V put(K key, V value) { if (value == null) { throw new NullPointerException(); } Entry<?,?>...
  • //HahpMap:映射,允许null值和null键,方法是不同步的 public class hanjia{ public static void main(String[] args){ Map map=new HashMap(); Scanner sn=new Scanner(System.in); S...
  • HashMap 允许插入null 的键值对。但是因为无法调用 null 的 hashCode() 方法,也就无法确定该键值对的桶下标,只能通过强制指定一个桶下标来存放。HashMap 使用第 0 个桶存放null 的键值对。 1.6版本 : ...
  • 首先我们先运行一个例子来分析 从例子中可以发现,hashmap...从分析中我们可以看到,hashtable,对于null会抛出异常,而对于null键,则会调用null.hashCode(),而导致空指针异常,而concurrenthashmap则对于null键值对,.
  • private fun hashtable() { //key value 都不能为null val hashtable = Hashtable<String?, String?>() // hashtable.put(null, null) // hashtable.put(null, "") // hashtable.put("", null)...
  • 我们查看两个类的put方法的源码。 Hashtable: ... // Make sure the value is not null if (value == null) { throw new NullPointerException(); } // Makes sure the key is not already in the ha
  • HashMap的key允许重复问题

    千次阅读 2020-12-20 12:29:21
    } p1.setAge(5)之后p1的hashCode就改变了,上述函数中hash(key)就发生了变化,虽然key是相同的对象,但是HashMap还是将其作为一个新key存储了。 出于效率的考虑,这种场景就不被支持了。算是是HashMap的一个坑吧。
  • ConcurrentHashMap为何不支持null键和null

    万次阅读 热门讨论 2019-02-19 23:39:52
    其中有一点就是 HashMap 是支持null键和null,而 ConcurrentHashMap 是不支持的; 后来查看了一下jdk源码,证明了确实是这样的。 HashMap.java 部分源码 static final int hash(Object key) ...
  • HashMap实例存储/对,允许任何类型的。 与常规对象不同,不会被字符串化。 例如,数字字符串不会混合,您可以传递Date , RegExp ,DOM Elements等等! (甚至为null和undefined ) HashMap构造函数重载...
  • 给定java hashmap中的,如何更新

    千次阅读 2021-02-28 09:17:47
    i_am_zero..6可能会有点晚,但这是...如果指定存在且非null,则它会尝试计算给定及其当前映射的新映射.final Map map1 = new HashMap<>();map1.put("A",0);map1.put("B",0);map1.computeIfPresent("B"...
  • HashMap里面key为null存放到哪?

    千次阅读 2020-08-06 12:47:49
    我们知道HashMap集合是允许存放null值hashMap是根据key的hashCode来寻找存放位置的,那当key为null时, 怎么存储呢? 在put方法里头,其实第一行就处理了key=null的情况。 // HashMap的put方法 public V put(K ...
  • HashSet 允许null 。 HashSet 是无序的,即不会记录插入的顺序。 HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。 ...
  • HashMap在put的时候会调用hash()方法来计算key的hashcode,可以从hash算法中看出当key==null时返回的为0。因此key为null时,hash算法返回值为0,不会调用key的hashcode方法。 HashTable从源码分析: 上面可以...
  • Hashtable 是线程安全的,ConcurrentHashMap Hashtable 是不允许 null 作为键和值的,HashMap允许null做为键值
  • hashmap.put(key, hashmap.get(key) + 1);put方法将取代现有密钥的,如果不存在,将会创build它。Java 8的方式:您可以使用computeIfPresent方法并为其提供一个映射函数,该函数将根据现有函数调用一个新。例如...
  • 其中有一点就是 HashMap 是支持null键和null,而 ConcurrentHashMap 是不支持的; 后来查看了一下jdk源码,证明了确实是这样的。 HashMap.java 部分源码 static final int hash(Object key) { int h; ...
  • 结论:HashMap对象的key、value均可为null。 Hashtable对象的key、value均不可为null。 且两者的的key均不能重复,若添加key相同的键值对,后面的value会自动覆盖前面的value,但不会报错。 1.从源码...
  • * 今天整理以下关于HashMap键的唯一null规则; * 目标:认识HashMap只能有一个key为null值的键值对的原理; * * 那接下来还是以往一样创建一个自己的测试类; * @author Administrator * */ public class ...
  • HashMap在put的时候会调用hash()方法来计算key的hashcode,可以从hash算法中看出当key==null时返回的为0。因此key为null时,hash算法返回值为0,不会调用key的hashcode方法。 HashTable源码 上面可以看出当...
  • HashMap判断是否为null

    千次阅读 2018-01-12 10:51:00
    当get()方法返回null值时,即可以表示HashMap中没有该,也可以表示该所对应的null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个,而应该用containsKey()方法来判断。 转载于:http...
  • 我们知道HashMap集合是允许存放null值hashMap是根据key的hashCode来寻找存放位置的,那当key为null时, 怎么存储呢? 在put方法里头,其实第一行就处理了key=null的情况。 1 2 3 4 5 ...
  • HashMap在put的时候会调用hash()方法来计算key的hashcode,可以从hash算法中看出当key==null时返回的为0。因此key为null时,hash算法返回值为0,不会调用key的hashcode方法。 上面可以看出当HashTable存入...
  • 1 实验 1.1 HashMap public static void main(String[] args) { HashMap<String, Object> map = new HashMap<...map.put(null, null); System.out.println(map); } 1.2 ConcurrentHashMap public stati...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,680
精华内容 23,472
关键字:

hashmap允许null键和值吗

友情链接: PROTEUS-wenkong.rar