Set集合
概述:java.util.Set
接口是Collection
的子接口,与其方法基本一致,相对较为严格。
特点:
- 不允许储存重复的元素
- 没有索引,不能使用普通for循环
- 不重复原理:Set集合在调用add方法存储元素时,会先调用其
hasCode
方法获取元素的哈希值,若无重复现象则存入集合,若有与其哈希值重复的元素再调用equals
方法比较两者是否相同,返回false
则存入。
实现类
HasSet集合
-
概述:储存元素不可重复且无序,底层的实现是
HasMap
集合的支持。根据对象的哈希值确定元素在集合中的储存位置,具有良好的存取和查找性能。 -
哈希表:数组+链表/红黑树,将哈希值相同的元素分为一组,链接到对应哈希值下方,当链长超过8时用红黑树的方式提高查询速度。
-
HasSet储存自定义类型元素,须在类中重写
equals() and hasCode()
方法以保证不能储存属性相同的对象元素。(此时属性相同的对象则哈希值相同且equals方法返回true,但地址值不同因为不是同一个对象) -
LinkedHasSet
继承自HasSet
,底层多了一条记录元素储存顺序的链表。
可变参数
-
使用条件:当方法参数列表的数据类型已知,但参数个数不确定。在定义方法时使用。
-
格式:
修饰符 返回值类型 方法名(数据类型...变量名){}
-
原理:可变参数底层是一个数组,根据传递参数个数的不同,创建不同长度的数组储存这些参数。
-
注意事项:
- 一个方法的参数列表只能有一个可变参数
- 如果方法的参数有多个,那么可变参数必须写在参数列表的末尾。
- Tips:当参数类型不确定时可写为
Object
类型。