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

AkataMoKa 发布于 2016/03/03 19:59
阅读 1K+
收藏 1

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

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

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

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

是这样的吗?


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

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

加载中
2
beijson
beijson
java.io.Reader 和 java.io.InputStream 组成了Java 输入类。Reader 用于读入16位字符,也就是Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。


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

2
公孙二狗
公孙二狗

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

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

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

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

2、字节和字符

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

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

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

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

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

大数据量可以使用MongoDB等

返回顶部
顶部