A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© darkads 中级黑马   /  2014-9-20 23:16  /  2444 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

ArrayList和HashSet的异同:
        1)ArrayList是一个有顺序的数组,每次放入其中的都是对象的引用,是可重复放入的。ArrayList就好像一个旅馆,一个人用他的名字可以定多个房间,他任何时候来都可以再定一个房间。
        2)HashSet是一个集合,每次放入一个新的元素,都会对其进行检查对象是否存在,如果存在则不会放入。而HashSet就好像只有一个房间,多个床位,当来一个人来了,没有他的位置就分个床位给他,如果有,那他就不能再获得位置了。
        3)那么HashSet如何判断这个元素是否存在呢?如果一个一个进行比较,元素个数少还好,但是一万个,也要一个一个比较吗?这样效率太低了,所以哈希算法由此而生。内存被分成了一个一个大致相当的区域,每一个区域有一个编号,当进行存放对象时,给每一个对象一个哈希码,对哈希码取余,获得的值就是内存区域的编号,而对象就放入这个空间中,那么当需要比较时,先从对象获得哈希码,然后计算出对象应该存放的内存区域,取出这个区域内的对象调用equals()方法进行比较,这样效率就极大的提高了,进行比较的操作就只会发生在一片区域内。但是这就需要保证不同对象的哈希值不一样,所以Object类中有一个获得哈希值的方法:hashCode()。
        4)只有在hash集合中的存放对象时,hashCode方法才有用。只有类的实例对象要被采用哈希算法存储与检索时,这个类才被要求覆盖hashCode方法,但是为了将来的扩展性提供一个也没什么不好,通常hashCode方法与equals方法一同被覆盖。
        5)当一个对象equals相等时,hashCode也必须相等。
        6)如果一个对象被存储进hash集合后,不能修改参与hash计算的字段。否则,会造成内存泄露

10 个回复

倒序浏览
总结的Hashset和 ArrayList 挺好
HashSet 实现元素唯一的原理依赖于 hashCode() 和 equals()需要特别说明
回复 使用道具 举报
感谢分享,谢谢楼主
回复 使用道具 举报
推崇这样的总结,楼主一定是看过至少一遍所有视频的。
我觉得笔记就是为自己量身定做的,自私点说,只要能够让自己看懂,帮助理解和复习就好。
赞。
回复 使用道具 举报
careit 发表于 2014-9-20 23:35
总结的Hashset和 ArrayList 挺好
HashSet 实现元素唯一的原理依赖于 hashCode() 和 equals()需要特别说明 ...

的确,谢谢提醒!
HashSet的内部是一个不使用键值对中的值的HashMap,这两个Hash集合实际上就是一个,hashCode()方法也只有在实现hash算法时,才有价值。
回复 使用道具 举报
JerryJava 发表于 2014-9-21 06:21
推崇这样的总结,楼主一定是看过至少一遍所有视频的。
我觉得笔记就是为自己量身定做的,自私点说,只要能 ...

谢谢!
当我们理解一个事物,能用自己的语言表述出来,才能体现自己是否真的理解。照搬一些教课书一样的回答,答案虽然准确,却始终是别人的东西,尽管自己今天的回答不好看,不精确,但毕竟是自己的东西,随着自己了解的更多,它能变得更加的完美,这就一个人的进步
回复 使用道具 举报
careit 中级黑马 2014-9-22 08:59:31
7#
darkads 发表于 2014-9-21 12:50
谢谢!
当我们理解一个事物,能用自己的语言表述出来,才能体现自己是否真的理解。照搬一些教课书一样的 ...

“尽管自己今天的回答不好看,不精确,但毕竟是自己的东西,随着自己了解的更多,它能变得更加的完美,这就一个人的进步”
很喜欢这句,不要害怕出错,这样才会进步:handshake
回复 使用道具 举报
dhgcy 中级黑马 2014-9-24 08:54:42
8#
谢谢分享。
回复 使用道具 举报
careit 中级黑马 2014-9-24 10:08:59
9#
careit 发表于 2014-9-20 23:35
总结的Hashset和 ArrayList 挺好
HashSet 实现元素唯一的原理依赖于 hashCode() 和 equals()需要特别说明 ...

又复习一遍
回复 使用道具 举报
总结不错,谢谢分享
回复 使用道具 举报
喜欢看总结性的帖子
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马