开发者社区> 问答> 正文

今天面试问HashMap用来装大数据,没有HashTable合适:报错

今天面试官问我,如果有大量的数据(>1000w),要保存到 HashMap,但是要避免 Key 的碰撞,有什么好的方法?

当时我不太了解具体的需求,我就只是回答了重写 hashCode 方法

面试完了以后我问面试官,他的答案是什么?

他说是用 HashTable 替换 HashMap,虽然性能差点,但是可以避免 Key 大量碰撞的问题

是这样的吗?


还有就是,他问我 InputStream 和 Reader 的区别?

我不太清楚他问的含义,我回答一个是字节流,一个是读取字节流的,不知道这样回答准确吗?

展开
收起
kun坤 2020-06-07 21:48:07 831 0
1 条回答
写回答
取消 提交回答
  • java.io.Reader 和 java.io.InputStream 组成了Java 输入类。Reader 用于读入16位字符,也就是Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。


    Reader支持16位的Unicode字符输出,InputStream支持8位的字符输出。
    Reader和InputStream分别是I/O库提供的两套平行独立的等级机构,

    ######

    1. 有 1000w 的数据,我的话用缓存了,例如 Redis,Memcached,是不是用 HashMap 或者 HashTable 都是找抽型?

    2. InputStream 是针对二进制读取,即针对字节,Reader 是针对字符读取(例如有的一个字符实际站占用的是 3 个字节,但是对 Reader 的接口来说,只是一个字符)

    ######最他妈反感提了问题不给答案的面试官,装高深,其实这些玩意起先不懂都没关系,上网一查就懂了,面试的人怕的不是他了解得不够,而是不肯学######直接问你 HashTable 和Hashmap 又啥区别就是了嘛  绕一大圈。。真够装的~~######那HashTable真的可以避免大量的Key碰撞吗?######大量数据保存这个有没说是单线程环境下还是多线程环境下的呢?多线程环境下, HashTable确实是好的选择,因为其同步。单线程环境下的话,明显要选HashMap吧,并且单线程环境下会存在碰撞吗?这个我就没仔细研究过。######

    1 、HashMap对于大数据量的rehash等操作可能导致CPU过高,性能降低。HashTable散列算法比hashmap简单,但是线程安全。但是两个对大数据都没有什么优势。

    2、字节和字符

    ######面试官估计也是个半吊子。hashmap采用的是线性表加链表进行数据存储,虽然 hashcode可能会碰撞,但只要保证key的equals方法不误判就没有问题了。第二个问题reader是字符读取,它在底层持有一个Inputstream,通过缓存InputStream读取的字节数据并将字节进行编码以字符流的形式返回给你。######

    要求保存到 HashMap(不是Map?),面试官的答案却又是Hashtable。

    ######嗯,是的 给我的感觉是,他挖了一个坑,想知道我是否知道能把它处理掉######一语道破天机######我也是这个感觉,就像面试官问,你上厕所是有左手还是用右用擦屁股,结果他的答案是用纸。。。######
    hashtable可以避免 Key 大量碰撞的问题
    不是######

    数据里有相同的key,那么碰撞就是客观存在的。

    避免碰撞就使用key可以重复的容器,

    大数据量可以使用MongoDB等

    2020-06-07 21:48:12
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云技术面试红宝书 立即下载
超全算法笔试-模拟题精解合集 立即下载
程序员面试宝典 立即下载