
获得徽章 0
- 一个人会孤独,两个人同样会孤独。一个人的孤独是站在一片白茫茫的雪地里,显得空旷,孤寂,需要一只鸟,一片云来打破这孤独。两个人的孤独,像两座矗立的大山,站的近,却不被理解。两个人的孤独显得更可怕一点。赞过评论1
- 哈希表(散列表)
哈希表或者称散列表,最关键的两个因素是
1. 构造高效的散列函数
2. 解决散列函数带来的冲突
对于构造高效的散列函数,最好的即是通过散列函数f(x)得到的值是唯一的。这样便可以在时间复杂度为O(1)查找到。但这种散列函数必然会需要更多的存储空间。所以在构造散列函数的时候需要寻找一个平衡点,散列函数f(x)得到的结果需要在一定范围内比较均衡。这样对于查找任何一个值时间上都是接近的,也是构造出较好的散列函数。展开评论点赞 - HashMap和HashTable的区别
1. HashMap不是同步(非synchronized)的,而HashTable是同步(synchronized)的,也是线程安全的。所以对于单线程程序,在不需要同步的特性下,HashMap执行效率更高
2. 在多线程中,HashTable是同步并且线程安全,可以在多线程中共享。HashMap在没有做好同步策略的情况下,多个线程不能共享HashMap。(在Java5中提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好)
3. HashMap可以有一个键(key)为null,可以有多个值(value)为null。而HashTable则不能。
4. HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。展开评论点赞