HashSet
底层结构
数组加上链表的结构,在jdk1.8后再加上红黑树;
如果数组长度大于8或者总元素长度大于64,则转化为红黑树
如图所示如上的数组中存储的都是一个节点对象,没有则指向空,如果有节点对象会指向下一个节点对象知道null为止
HashSet是由HashMap维护的
特点
增删比链表慢但是比数组快,查询比数组慢但是比链表快
存储语法
- 根据对象或者父类的默认的Object中的hashcode方法得到对象的整数表达形式
对象.hashcode()或者Object.hashcode()
- 通过获得hashcode的值进行hash算法得到位桶的索引值(即数组的索引值)
最简单的hash算法是hashcode%数组长度=位桶索引值
- 存储
1)如果该索引值指向null则将要添加的数据添加到此为止,此数据则为头节点
2)如果该索引值指向下一个节点值,则意味者个数组位置有值,则依次比较直到指向null(通过重写hash方法和equals方法判断两个对象是否相等,这里的相等意味着对象的内容相等,而不是地址相等),在最后添加内容