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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这是我写的博客,不知道能不能行啊
一、ArrayList
ArrayList:是List的子类,也是数组结构。
特点:1.长度可变;2.线程不同步;3.是作为替代了Vector出现的;4.看到是List集合形式,就知道可以有重复元素,并且可以实现增删改查四个功能。
二、HashSet
HashSet:是Set集合的子类,哈希表结构。
特点:1.不允许存储重复元素,因为会发生查找的不确定性;2.不保证存入和取出顺序一致;3.查询效率非常高。
HashSet集合取出元素的方法只有一个:迭代器。
分别介绍完ArrayListHashSet之后,再看一下他们的区别:
ArrayList1.有序,存入数据和取出数据一致;2.有索引,所以保证有序;3.允许重复元素;
HashSet1.不保证顺序;2.不允许重复元素。
在学习HashSet时,存储元素时接触到了hash表和hash算法以及hashCode()。对于这这三个知识点进行一下说明。
1.hash算法:因为HashSet中不允许重复元素,所以在存储时就会算出每个元素固定的位置或叫做角标。那么算的方法就叫做hash算法:
methodelement){
index = ascii % 10
return index
2.Hash表:用于存储元素和哈希值对应关系的容器称之为哈希表。
3.hashCode()hash算法功能本身在堆底层就是哈希表结构,计算对象在该结构存放的地址。这个方法就叫做hashCode()
在运用hashSet时,会遇到一个问题,哈希冲突。首先解释一下,何为哈希冲突:
当哈希算法算出两个元素的值相同时,这样的情况就叫做哈希冲突。
那么遇到这种问题,如何解决呢?冲突后,对元素进行进一步的判断。判断元素的内容:
哈希表在判断元素是否相同,一句hashCode()方法,如果哈希冲突(哈希值相同),再判断元素的equals方法。如果equals返回true,表示来两个元素相同,不进行存储;返回false,表示两个元素不同,进行存储。
HashSet就是通过hashCode()equals两种方法来保证结构唯一性:
HashCode是为了根据元素自身的特点确定哈希值;equals方法是为了解决哈希值的冲突。这样以来就完全是实现元素唯一性。
在此还要强调一下hashCode方法一个重要的作用:
当一个对象被存储进hashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了。否则,对象修改后的哈希值与最初存储进hashSet集合中的哈希值不同。这种情况下,即便在contains方法使用该对象的当前引用作为参数去hashSet集合中检索对象,也将返回找不到对象的结果,导致无法从HashSet集合中单独删除当前对象,从而造成内存泄漏。

2 个回复

正序浏览
比较实用不错
回复 使用道具 举报
笔记
比较实用不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马