HashMap()中的分组组数与阈值之间的关系是什么?

我就直接上图了
我在详细的说一下我想问的问题点:
为什么我下面的代码执行完并没有扩容,但是允许的个数为2,现在我存了3个???
图片说明

0

7个回答

更正一下
null != table[bucketIndex]表示的是数组中hash值取余冲突的情况,也就是说,即使存放的数据数量超过threshold,但是如果存放位置是数组上的闲置位置(为null的位置),那么数组是不会扩容的(充分利用空间)

以下是修改后内容

看jdk1.7实现源码

   /**
     * Associates the specified value with the specified key in this map.
     * If the map previously contained a mapping for the key, the old
     * value is replaced.
     *
     * @param key key with which the specified value is to be associated
     * @param value value to be associated with the specified key
     * @return the previous value associated with <tt>key</tt>, or
     *         <tt>null</tt> if there was no mapping for <tt>key</tt>.
     *         (A <tt>null</tt> return can also indicate that the map
     *         previously associated <tt>null</tt> with <tt>key</tt>.)
     */
    public V put(K key, V value) {
        if (table == EMPTY_TABLE) {
            inflateTable(threshold);
        }
        if (key == null)
            return putForNullKey(value);
        int hash = hash(key);
        int i = indexFor(hash, table.length);
        for (Entry<K,V> e = table[i]; e != null; e = e.next) {
            Object k;
            if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
                V oldValue = e.value;
                e.value = value;
                e.recordAccess(this);
                return oldValue;
            }
        }

        modCount++;
        addEntry(hash, key, value, i);
        return null;
    }

indexFor方法是将hash值映射到你数组中的位置中(数组hash值与数组大小的&运算结果),再看addEntry方法

      /**
 * Adds a new entry with the specified key, value and hash code to
 * the specified bucket.  It is the responsibility of this
 * method to resize the table if appropriate.
 *
 * Subclass overrides this to alter the behavior of put method.
 */
void addEntry(int hash, K key, V value, int bucketIndex) {
    if ((size >= threshold) && (null != table[bucketIndex])) {
        resize(2 * table.length);
        hash = (null != key) ? hash(key) : 0;
        bucketIndex = indexFor(hash, table.length);
    }

    createEntry(hash, key, value, bucketIndex);
}

threshold是容量*加载因子,4*0.5=2,你存第三个确实满足了size >= threshold,但是不满足null != table[bucketIndex],也就是说你有两个key的hash值位运算之后存放在容量为4的数组中空闲位置里(如果下标在同一个位置(hash冲突),则同一个位置上数据以链表的形式纵向存储(假定在数组上的存储为横向存储)),所以没有扩容。至于有的人扩容了有的人没有扩容,那是因为存放的key不一样,所以hash值不一样,hash值不一样位运算结果就不一样,计算结果不一样存储在数组上的位置就不一样,只要存放的位置是闲置的,数组就不会扩容,但是这里有一个上限,当数组存满了,再继续存储便一定会产生冲突,从而扩容(一个优质的hash函数,应当避免散列后冲突的情况,我想当初设计者留下0.75的默认加载因子也应该是出于对hashmap的效率保护,避免过多的链表影响效率,在数组填满75%的空间下,hash冲突的几率应该是不大的)

以下是hash源码,以及获取数组下标源码

     final int hash(Object k) {
        int h = hashSeed;
        if (0 != h && k instanceof String) {
            return sun.misc.Hashing.stringHash32((String) k);
        }

        h ^= k.hashCode();

        // This function ensures that hashCodes that differ only by
        // constant multiples at each bit position have a bounded
        // number of collisions (approximately 8 at default load factor).
        h ^= (h >>> 20) ^ (h >>> 12);
        return h ^ (h >>> 7) ^ (h >>> 4);
    }


    transient int hashSeed = 0;

  int indexFor(int h, int length) {
            // assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2";
            return h & (length-1);
        }

one,two,three没有扩容,但是one,two,three1扩容了,可以从debug看出

下面代码是从源码中提取出来的,用来获取字符串key在数组中的位置

 public static void main(String[] args) {
        System.out.println(indexFor(hash("one"),4));
        System.out.println(indexFor(hash("two"),4));
        System.out.println(indexFor(hash("three"),4));
        System.out.println(indexFor(hash("three1"),4));
    }

     static final int hash(Object k) {
            int h = 0;
            if (0 != h && k instanceof String) {
                return sun.misc.Hashing.stringHash32((String) k);
            }

            h ^= k.hashCode();

            // This function ensures that hashCodes that differ only by
            // constant multiples at each bit position have a bounded
            // number of collisions (approximately 8 at default load factor).
            h ^= (h >>> 20) ^ (h >>> 12);
            return h ^ (h >>> 7) ^ (h >>> 4);
        }


     static int indexFor(int h, int length) {
            // assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2";
            return h & (length-1);
        }

执行结果
3
1
0
3
three1跟one在数组中的存储位置冲突了,如果不扩容就会在one之后形成并列的链表形式存储,这样会大大影响Hash查询效率
结合之前我的分析,应该不难看出hashmap的扩容机理

1
lp18036194881
lp180361* 我目前做的不是app这块,对视频通话也不是很了解,不过网上资料应该很多
一年多之前 回复
lp18036194881
lp180361* 已经看过了
一年多之前 回复
qq_39026415
梦里_人 最下面有我最新的对HashMap源码错误的理解,我诚挚邀请你去看看
一年多之前 回复
qq_39026415
梦里_人 不好意思这么长时间才回复你信息。最近我们公司要在app上增加视频通话的功能,正在收集资料中,请问你做过这个功能吗?
一年多之前 回复

当桶的数量不变,然后元素越来越多的时候,就会发生很多的hash冲突,所以达到一个阈值,就会重新对桶的数量进行扩容

0
ranyixu11
doggy_coder 回复梦里_人: 感谢,学习了
一年多之前 回复
qq_39026415
梦里_人 最下面有我最新的对HashMap源码错误的理解,我诚挚邀请你去看看,本帖子我采纳的回答你更应该看看
一年多之前 回复
qq_39026415
梦里_人 老铁看看我贴中下面的图,是回复给你的,可以看看,如有什么问题请指出
一年多之前 回复
ranyixu11
doggy_coder 回复梦里_人: 我调试了一下我的代码,在put第三个之后,就会发现table的大小变成了8,阈值变成了4,所以扩容了的。不知道你是如何判断是否扩容的,方法是否正确
一年多之前 回复
qq_39026415
梦里_人 我知道这个,但是你再次看看我增加的描述吧
一年多之前 回复
ranyixu11
doggy_coder 具体的关系是 加载因子x容量 = 阈值; threshold = (int)Math.min(capacity * loadFactor, MAXIMUM_CAPACITY + 1);
一年多之前 回复

阈值= 容量*加载因子

你说的分组组数就是容量吧

0
qq_39026415
梦里_人 最下面有我最新的对HashMap源码错误的理解,我诚挚邀请你去看看,本帖子我采纳的回答你更应该看看
一年多之前 回复
qq_39026415
梦里_人 之前没有描述清楚,现在增加了描述
一年多之前 回复
0
qq_39026415
梦里_人 最下面有我最新的对HashMap源码错误的理解,我诚挚邀请你去看看,本帖子我采纳的回答你更应该看看
一年多之前 回复

ranxiyu11 请看如下图
图片说明

0
qq_39026415
梦里_人 你把你的测试截图行吗?
一年多之前 回复
ranyixu11
doggy_coder 卧槽,神奇,我也不知道了,我的阈值变成了4,table大小变成了8,扩容了的,和你的结果不一样
一年多之前 回复

看jdk1.7实现源码
/**
* Associates the specified value with the specified key in this map.
* If the map previously contained a mapping for the key, the old
* value is replaced.
*
* @param key key with which the specified value is to be associated
* @param value value to be associated with the specified key
* @return the previous value associated with key, or
* null if there was no mapping for key.
* (A null return can also indicate that the map
* previously associated null with key.)
*/
public V put(K key, V value) {
if (table == EMPTY_TABLE) {
inflateTable(threshold);
}
if (key == null)
return putForNullKey(value);
int hash = hash(key);
int i = indexFor(hash, table.length);
for (Entry e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}

    modCount++;
    addEntry(hash, key, value, i);
    return null;
}
    indexFor方法是将hash值映射到你数组中的位置中,可以简单理解为求余操作,再看addEntry方法
     /**
 * Adds a new entry with the specified key, value and hash code to
 * the specified bucket.  It is the responsibility of this
 * method to resize the table if appropriate.
 *
 * Subclass overrides this to alter the behavior of put method.
 */
void addEntry(int hash, K key, V value, int bucketIndex) {
    if ((size >= threshold) && (null != table[bucketIndex])) {
        resize(2 * table.length);
        hash = (null != key) ? hash(key) : 0;
        bucketIndex = indexFor(hash, table.length);
    }

    createEntry(hash, key, value, bucketIndex);
}
    threshold是容量*加载因子,4*0.5=2,你存第三个确实满足了size >= threshold,但是不满足null != table[bucketIndex],也就是说你有两个key的hash值取余之后存放在容量为4的数组中同一个下标里,同一个位置是以以链表的形式存储,所以没有扩容,其实你在存放第三个元素的时候,数组只是用了两个位置而已,至于有的人扩容了有的人没有扩容,那是因为存放的key不一样,所以hash值不一样,hash值不一样取余获得的位置就不一样,只要存放的位置不重叠,map是一定会扩容的
0
lp18036194881
lp180361* 你的意思是?
一年多之前 回复
qq_39026415
梦里_人 首先谢谢你的回答;但是请把put中的可以从上到下换为one,two,three,有惊喜等你^_^
一年多之前 回复

这是一篇错误理解,大家可以看看

图片说明

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
HashMap只有容量达到阀值才发生扩容吗?大错特错!
看了网上很多文章,说HashMap在元素达到负载因子对应数的时候就发生扩容。如果你看过源码就会发现,其实还有一种情况也可能会发生扩容:树形化的时候。 什么是树形化? HashMap底层是由数组+链表组成的,为了方便不懂的人更容易理解,那我们就先假设HashMap底层就是数组,先不管链表。 那对于一个对象add到HashMap中,那HashMap的add方法是如何来确定这个对象是放在数组中的哪...
hashset和hashmap有什么关系
http://blog.csdn.net/u014033756/article/details/505998791、HashSet底层是采用HashMap实现的。HashSet 的实现比较简单,HashSet 的绝大部分方法都是通过调用 HashMap 的方法来实现的,因此 HashSet 和 HashMap 两个集合在实现本质上是相同的。 2、HashMap的key就是放进HashSet中对象,
精密仪器阈值
详细解释了阈值分辨率之间的关系 详细解释了阈值分辨率之间的关系详细解释了阈值分辨率之间的关系
HashSet的实现,与hashMap的关系
1、HashSet底层是采用HashMap实现的。HashSet 的实现比较简单,HashSet 的绝大部分方法都是通过调用 HashMap 的方法来实现的,因此 HashSet 和 HashMap 两个集合在实现本质上是相同的。 2、HashMap的key就是放进HashSet中对象,value是Object类型的。 3、当调用HashSet的add方法时,实际上是向HashMap中增加
hashmap 中的初始容量和加载因子之间的联系
初始容量 是哈希表在创建时的容量。 加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。
数与量的区别
平日里,我们经常是把“数”和“量”联系在一起使用的。这两个概念之间有什么不同呢?儿童是怎样认识量的?让我们一一来讨论。 我们知道,数可以表示事物的多少或事物的次序。而说到对“量”的认识,却似乎不像对数的认识那样清晰。在我们身边,存在着各种各样的量:你正拿着的这本书有长度、有宽度还有厚度,它与你看的其他一些书籍比较,封面也许正好一样大,也许比某几本杂志要小些。孩子跑过来了,要帮你把许多暂时
Hash桶的概念
在Java的Hashmap中就是使用hash桶进行构造的,hashmap中的key值不能相同,下面学习hash桶的原理。http://luoyafei.blog.51cto.com/10731357/1772077
最佳线程数总结
最佳线程数: 性能压测的情况下,起初随着用户数的增加,QPS会上升,当到了一定的阀值之后,用户数量增加QPS并不会增加,或者增加不明显,同时请求的响应时间却大幅增加。这个阀值我们认为是最佳线程数。   为什么要找最佳线程数 1.过多的线程只会造成,更多的内存开销,更多的CPU开销,但是对提升QPS确毫无帮助 2.找到最佳线程数后通过简单的设置,可以让web系统更加稳定,得到最高,最稳定的
sql统计分组的组数
SELECT COUNT(*) from (SELECT * from enroll GROUP BY org_id) newtable; 例子 查询攻击的类别数 SELECT "count"(*) from (SELECT event_type from internal_app_bsackc."event" group by event_type) as a;
[转]为什么Java中的HashMap默认加载因子是0.75
前几天在一个群里看到有人讨论hashmap中的加载因子为什么是默认0.75。 HashMap源码中的加载因子 static final float DEFAULT_LOAD_FACTOR = 0.75f; 当时想到的是应该是“哈希冲突”和“空间利用率”矛盾的一个折衷。 跟数据结构要么查询快要么插入快一个道理,hashmap就是一个插入慢、查询快的数据结构。 加载因子是表示...
HashMap实现原理,利用数组和链表存储元素
数组:存储区间连续,占用内存严重,寻址容易,插入删除困难 链表:存储区间离散,占用内存比较宽松,寻址困难,插入删除容易 hashmap综合应用了这两种数据结构,实现了寻址容易,插入删除也容易 HashMap结构示意图: 实现原理:用一个数组来存储元素,但是这个数组存储的不是基本数据类型。HashMap实现巧妙的地方就在这里,数组存储的元素是一个Entry类,这个类有
【Java学习】从源码层面彻底搞懂HashMap(Java8)
一、属性 //默认初始容量 static final int DEFAULT_INITIAL_CAPACITY = 16; //最大容量 static final int MAXIMUM_CAPACITY = 1073741824; //默认加载因子,当插入,MAXIMUM_CAPACITY/DEFAULT_LOAD_FACTOR(最大/加载因子)此时就该扩容了,加载因子越大空间利用越多。
什么是分辨率?分辨率和像素的关系?
什么是分辨率?     所谓“分辨率”指的是单位长度中所具有或撷取的像素数目。 分辨率与像素一样,也分为很多种。其中最常见的就是影像分辨率,我们通常说的数码相机输出照片最大分辨率,指的就是影像分辨率,单位是ppi(Pixel per inch)。打印分辨率也是很常见的一种,顾名思义,就是打印机或者冲印设备的输出分辨率,单位是dpi(Dot per inch)。显示器分辨率,就是Wind
什么是子查询?其分类?与主查询的关系?
什么是子查询 子查询概念 子查询:sub query 子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块。当一个查询是另一个查询的条件时,称之为子查询。 子查询:指在一条select语句中,嵌入了另外一条select语句,那么被嵌入的select语句称之为子查询语句。   主查询概念 主查询:主要的查询对象,第一条select语句,确定的用户所有获取的数据目标...
对hashmap的理解(侧重于初始化容量,自动扩容算法,规则)
一、HashMap的默认值 HashMap的默认初始容量为16,默认加载因子为0.75,默认阈值为:16*0.75=12 当HashMap的size超过阈值,HashMap的容量就会改变(扩大为原始大小的两倍) 如下图代码: 1在进行第一次往mao里添加数据时,我们可以看到下拉数值的变化: 2当循环次数(也就是HashMap的size)超过threshold阈值(12)时,就会发...
map set list三种集合之间的关系及各自的特点
今天给大家带来的是三种常用集合各自的性能分析,这里只是浅谈,就不深入讲解底层了。 在这里先上关系图: 一,Conllection: 接下来先看一下Collection接口: 他有两个子接口,Set和List, 1,Set(公共特点;无序) 是一个无序的集合接口,并且元素不可重复,当然,这里的无序是针对放入顺序而言,并不是绝对的无序,他有两个子类,一个是hashSet,还
ConcurrentHashMap的红黑树实现分析
知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得 红黑树 红黑树是一种特殊的二叉树,主要用它存储有序的数据,提供高效的数据检索,时间复杂度为O(lgn),每个节点都有一个标识位表示颜色,红色或黑色,有如下5种特性: 1、每个节点要么红色,要么是黑色; 2、根节点一定是黑色的; 3、每个空叶子节点必须是黑色的; 4、如果一个节点是红色的,那么它的子节点必须是黑色的;
HashMap中傻傻分不清楚的那些概念
很多人在通过阅读源码的方式学习Java,这是个很好的方式。而JDK的源码自然是首选。在JDK的众多类中,我觉得HashMap及其相关的类是设计的比较好的。很多人读过HashMap的代码,不知道你们有没有和我一样,觉得HashMap中关于容量相关的参数定义的太多了,傻傻分不清楚。其实,这篇文章介绍的内容比较简单,只要认真的看看HashMap的原理还是可以理解的,单独写一篇文章的原因是因为我后面还有几...
HashMap如何计算Entry在桶中的下标?
我们知道HashMap内部包含了一个 Entry 类型的数组 table。 transient Entry[] table; Entry 存储着键值对。它包含了四个字段,从 next 字段我们可以看出 Entry 是一个链表。即数组中的每个位置被当成一个桶(bucket),一个桶存放一个链表。HashMap 使用拉链法来解决冲突,同一个链表中存放哈希值相同...
两数之和的hashmap问题(key和value的关系)
Description: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 首先暴...
HashMap和HashTable之间的区别
总结一下hashMap和hashtable方面的知识点吧: 1.  关于HashMap的一些说法: a)  HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。HashMap的底层结构是一个数组,数组中的每一项是一条链表。 b)  HashMap的实例有俩个参数影响其性能: “初始容量” 和 装填因子。 c)  HashMap实现不同步,线程不安全。  HashTable线程安...
HashMap 在 JDK 1.8 后新增的红黑树结构
读完本文你将了解到: 点击查看 Java 集合框架深入理解 系列 - - 乾杯传统 HashMap 的缺点HashMap 在 JDK 18 中新增的数据结构 红黑树HashMap 中关于红黑树的三个关键参数HashMap 在 JDK 18 中新增的操作桶的树形化 treeifyBinHashMap 在 JDK 18 中新增的操作 红黑树中添加元素 putTreeVal
分析奇数与偶数之间的关系
C. Mike and gcd problem time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Mike has a sequence A = [a1, a2, ..
netty中基本组件的作用与关系
Netty中的基本组件及关系 概述 这篇文章主要是用来介绍netty中常用的一些组件,以及这些组件之间的存在关系 Channel —-Socket EventLoop —-控制流,多线程处理,并发; ChannelHandler和ChannelPipeline Bootstrap 和 ServerBootstrap Channel 接口 基本的I/O操作,在基于...
关键活动(30 分)
假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。 比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系
为什么Map桶中个数超过8才转为红黑树
因为,大部分的文章都是分析链表是怎么转换成红黑树的,但是并没有说明为什么当链表长度为8的时候才做转换动作。本人第一反应也是一样,只能初略的猜测是因为时间和空间的权衡。 要弄明白这个问题,我们首先要明白为什么要转换,这个问题比较简单,因为Map中桶的元素初始化是链表保存的,其查找性能是O(n),而树结构能将查找性能提升到O(log(n))。当链表长度很小的时候,即使遍历,速度也非常快,但是当链表长...
用hashmap进行数据的分组分类--球队的阵容分类
hashmap进行数据的分组分类--球队的阵容分类:前锋,中场,后卫           定义 Map> hashMap = new HashMap>(); key为Object型,value值为list的容器,泛型为TeamSquad(球队阵容的对象)。根据场上位置进行分类 teamSquad.position为可以获取球员的位置,其中包含了:前锋,中场,后卫,门将四个类别且人数不 确定
JDK1.7中HashMap何时扩容
深入理解HashMap的扩容机制 ——转载: http://www.cnblogs.com/yanzige/p/8392142.html 一、什么时候扩容: 网上总结的会有很多,但大多都总结的不够完整或者不够准确。大多数可能值说了满足我下面条件一的情况。 扩容必须满足两个条件: 1、 存放新值的时候当前已有元素的个数必须大于等于阈值 2、 存放新值的时候当前存放数据发生hash碰撞(当...
总页数,页码,起始记录数之间的关系
totalRecords:总记录数 pageRecordNum:每页最多显示记录数 totalPages:总页数 pageNo:页码 pageBegin:每页开始的记录数 pageEnd:每页结束记录数 各变量之间的关系: totalPages = totalRecords%pageRecordNum  ==  0 ?totalRecords / pageRecordNum
关于hashMap的key和value的理解
refer to: http://xiaolu123456.iteye.com/blog/1485349  public V put(K key, V value) {     if (key == null)         return putForNullKey(value);         int hash = hash(key.hashCode());
一个demo告诉你HashMap容量变化
           对HashMap所有了解的都知道HashMap有一个负载因子loadFactor,当HashMap容量超过阀值时将进行扩容,该文就是根据围绕HashMap的阀值、容量进行探讨,这些探讨也是源于一开始了解HashMap的容量都是通过别人的文章,却从未自己去体验测试过。        该文主要解决之前促使我去探讨HashMap及探讨中所遇到的问题: (1)new HashMa...
如何理解计算机组成中——真值,原码,补码,反码,移码之间的关系
关于原码、反码、补码和移码的定义如下 1:原码:      2:补码      3:反码      4:移码     上述公式很复杂,因此,可以总结出一些常见的规律: 原码 如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负数为1。剩下的n-1位表示概数的绝对值。   例如: X=+101011 , [X]原= 0, 0101011    X=-1
HashSet与HashMap之间的关系
HashSet底层就是HashMap,只是HashSet只用了HashMap的key,没用value。
HashMap详细介绍
本篇文章转载自脚本之家:https://www.jb51.net/article/42769.htm   第1部分 HashMap介绍 HashMap简介 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。 HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。 HashMap 的实现不是同步的...
JDK7与JDK8中HashMap的实现的区别
JDK7中的HashMap HashMap底层维护一个数组,数组中的每一项都是一个Entry transient Entry[] table; 我们向 HashMap 中所放置的对象实际上是存储在该数组当中; 而Map中的key,value则以Entry的形式存放在数组中 static class Entry implements Map.Entry { fina
数据结构 – 树的度和结点数的关系
一、概念 与图论中的“度”不同,树的度是如下定义的:有根树T中,结点x的子女数目称为x的度。也就是:在树中,结点有几个分叉,度就是几。 一个有用的小公式:树中结点数 = 总分叉数 +1。(这里的分叉数就是所有结点的度之和) 二、度的计算 1.设树T的度为4,其中度为1,2,3,4的节点个数分别为4,2,1,1,则T中的叶子数为? 解: 叶子的度数为0;那么设叶子
HashMap数据类型
在刷题中,发现hashmap不熟悉,想使用key为char,value为int,发现不能用,原因如下。 HashMap不能使用基本数据类型。 没有理解引用类型和原始类型。 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型  
序偶关系
<br />序:就是有序的意思 <br /> 偶:一对儿. <br /> 序偶:一对有序的数.用一对儿 < >来表示序偶. <br /> 如: <br /> <a,b>是序偶, <b,a>也是序偶,两者是不同的. 如果无序,则称为无序偶.表示为(a,b)<br /> (a,b)和(b,a)是相同的.<br /> <br />见离散数学<br /> <br /> 有向图,二叉树,链表等有方向性的结构用序偶来表示关系. <br /> 无向图中,用(a,b)来表示一条边.
3.kafka主题、分区、副本关系
./kafka-topics.sh --create --topic topic2--replication-factor 2 --partitions 4 --zookeeper 10.10.100.215:218 topic 主题创建了2个副本 ,4个分区 向 topic2 写入hello ,这个hello 会被分配到 其中一个分区和该分区的副本,并且这个hello 在这个分区写入是有...
字符与ASCII码十六制之间的关系
【转】http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29110326&id=4663261 【转】http://blog.csdn.net/small5e4444/article/details/6563786 最近在学这方面的内容,看了这两篇文章的内容,写的不错,第一个是介绍了转换原理,第二个是三者的队形关系
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 人工智能中深度学习是什么 数据库中课程名是什么