几种Set的比较
几种Set的比较
- HashSet:不保证元素的添加顺序,底层采用哈希表算法,查询效率高。判断两个元素是否相等
equals方法返回为true要求hashCode值必须相等。即要求存入HashSet中的元素要覆盖equals方
法和hashCode方法
- LinkedHashSet是HashSet的子类,底层采用了哈希表算法以及链表算法,既保证了元素的添加
顺序,也保证了查询效率。但是整体性能要低于HashSet
- TreeSet不保证元素的添加顺序,但是会对集合中的元素进行排序。底层采用红-黑树算法,树结
构比较适合查询,但是添加的效率较低
各种Set集合性能分析
HashSet和TreeSet是Set集合中用得最多的集合。HashSet总是比TreeSet集合性能好,因为HashSet不需要额维护元素的顺序。
LinkedHashSet需要用额外的链表维护元素的插入顺序,因此在插入时性能比HashSet低,但在迭代访问(遍历)时性能更高。因为插入的时候即要计算hashCode又要维护链表,而遍历的时候只需要按链表来访问元素。
EnumSet元素是所有Set元素中性能最好的,但是它只能保存枚举类型的元素。
相关的集合计算
addAll将指定集合中的所有元素都添加到此集合中,如果在进行此操作的同时修改了指定的集合,那么将不能保证操作的正确性removeAll从指定的集合中移除包含在另一个集合中的元素,返回值为boolean,如果包含了要移除的对象则返回true否则false
retainAll仅仅保留集合中同时包含在指定集合的对象,其它的全部移除containsAll用来查看在该集合中是否存在在指定集合中的所有对象,返回true表示存在,否则false