黑马程序员技术交流社区

标题: ArrayList和HashSet的异同: [打印本页]

作者: darkads    时间: 2014-9-20 23:16
标题: ArrayList和HashSet的异同:
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计算的字段。否则,会造成内存泄露


作者: careit    时间: 2014-9-20 23:35
总结的Hashset和 ArrayList 挺好
HashSet 实现元素唯一的原理依赖于 hashCode() 和 equals()需要特别说明
作者: pvting    时间: 2014-9-20 23:37
感谢分享,谢谢楼主
作者: JerryJava    时间: 2014-9-21 06:21
推崇这样的总结,楼主一定是看过至少一遍所有视频的。
我觉得笔记就是为自己量身定做的,自私点说,只要能够让自己看懂,帮助理解和复习就好。
赞。
作者: darkads    时间: 2014-9-21 12:43
careit 发表于 2014-9-20 23:35
总结的Hashset和 ArrayList 挺好
HashSet 实现元素唯一的原理依赖于 hashCode() 和 equals()需要特别说明 ...

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

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

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

又复习一遍
作者: dreamseekerkun    时间: 2014-9-24 10:12
总结不错,谢谢分享
作者: 小漠    时间: 2014-9-24 10:16
喜欢看总结性的帖子




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2