set集合
set集合的特点:
set集合中的方法和collection中的方法是一样的。
无序性(元素存取的顺序不一致),元素不重复<list集合中的元素是有序的,元素可以重复>
set集合有三个子实现类:
HashSet的概述:
此类实现set接口,有哈希表(实际上是一个hashmap)支持。
它不保证set的迭代顺序,特别是它不保证该顺序恒久不变。HashSet允许出现null值。
当你使用add存储的时候,会调用HashCode()方法和equals方法。
当你往set集合中存储元素的时候,他会默认比较地址值,如果地址值不一样,就会存储到集合中。
我们认为的是只要两个成员变量的值一样,那么两个对象是一样的,如果这样认为就要重写HashCode()方法和equals方法。
HashSet集合保证元素的为一样是靠元素重写HashCode()方法和equals方法,如果不重写这两个方法,则无法保证元素的唯一性。
String Integer 默认重写了 hahsCode()方法和equals()方法。
HashSet:底层的数据结构是哈希表,线程不安全,效率高。
LinkedHashSet的概述:
具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。线程不安全,效率高。
LinkedHashSet 底层数据结构是链表和哈希表。
链表保证了元素有序,哈希表保证了元素唯一。
LinkedHashSet 元素有序且唯一。
TreeSet的概述:
TreeSet 底层数据结构是二叉树(红黑树)。
TreeSet集合的特点,元素唯一,且能对元素进行排序 线程不安全,效率高。
使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。
如果使用的是空参构造,那么采用的是自然排序。
如果使用的是有参构造,那么采用的是比较器排序,要求元素必须实现一个Compareble接口,并且重写里面的comPare方法 ,根据此方法的返回值来决定元素的排列顺序,也可以直接在类中写一个compare方法。