集合Collection接口: 是所有单列集合的最顶层接口
add()方法返回的意思是是否添加成功,添加动作是一定成功的。但是对于其他集合,添加不一定成功
分为list接口和set接口
List接口有序的(存储123,取出也是123),可以重复,有索引
有索引,可以使用普通for循环遍历
**set接口无序不可重复**
没有索引,不能使用带索引的方法,不能使用普通for循环遍历
哈希值:他是一个10进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来的地址,不是数据实际存储的物理地址)
在Object类有一个方法,可以获取对象的哈希值
HashSet的查询速度非常快,先把元素按照相同的哈希值分组,相同的哈希值把它挂到下面, 超过8位把他转换为红黑树
HashSet集合存储数据的结构(哈希表)
jdk1.8之前:哈希表=数组+链表
jdk1.8版本之后:哈希表也等于数组加链表,链表变成了红黑树,数组+红黑树(提高查询的速度)如果链表长度超过了8位,那么就会把链表转换为红黑树
哈希表的特点:速度快
HashSet集合不允许重复的原理
只要是new的,就会把他们存储到堆内存当中,Set集合在调用add方法的时候,add方法会调用元素的hashCode方法和equals方法,通过hashCode方法计算元素的哈希值,判断元素是否重复