在Java的Set体系中,根据实现方式不同主要分为两大类,HashSet和TreeSet
HashSet
是哈希表实现,HashSet中的数据是无序的,可以放入null,但只能放入一个null,底层基于HashMap
在HashSet中,它通过 hashCode() 和 equals() 方法来保证元素不重复。
基本操作都是基于HashMap底层实现的,当向HashSet中添加元素的时候,
首先计算元素的HashCode值,通过HashCode值计算出元素的存储位置,如果位置为空,就添加进去;
如果不为空则用equals()方法比较元素是否相等,相等就不添加,否则找一个空位添加。
TreeSet
是二叉树实现,TreeSet中的数据是自动排好序的,不允许放入null值,
TreeSet 底层是TreeMap的keySet(),TreeMap是按照key排序的,
元素在插入TreeSet时compareTo()方法要被调用,所以TreeSet中的元素要实现Comparable接口,
TreeSet是用compareTo()来判断重复元素的。