Set接口三种实现类的比较

Set接口实现类的比较

        HashSet:不保证元素的添加顺序,底层采用哈希表算法,查询效率高。判断两个元素是否相等equals方法返回为true要求hashCode值必须相等。即要求存入HashSet中的元素要覆盖equals方法和hashCode方法

        LinkedHashSet是HashSet的子类,底层采用了哈希表算法以及链表算法,既保证了元素的添加顺序,也保证了查询效率。但是整体性能要低于HashSet

        TreeSet不保证元素的添加顺序,但是会对集合中的元素进行排序。底层采用红-黑树算法,树结构比较适合查询,但是添加的效率较低

性能分析

        HashSet和TreeSet是Set集合中用得最多的集合。HashSet总是比TreeSet集合性能好,因为HashSet不需要额维护元素的顺序。
        LinkedHashSet需要用额外的链表维护元素的插入顺序,因此在插入时性能比HashSet低,但在迭代访问(遍历)时性能更高。因为插入的时候即要计算hashCode又要维护链表,而遍历的时候只需要按链表来访问元素。

        EnumSet元素是所有Set元素中性能最好的,但是它只能保存枚举类型的元素。

相关的集合计算

        addAll将指定集合中的所有元素都添加到此集合中,如果在进行此操作的同时修改了指定的集合,那么将不能保证操作的正确性
        removeAll从指定的集合中移除包含在另一个集合中的元素,返回值为boolean,如果包含了要移除的对象则返回true否则false
        retainAll仅仅保留集合中同时包含在指定集合的对象,其它的全部移除
        containsAll用来查看在该集合中是否存在在指定集合中的所有对象,返回true表示存在,否则false

Collection和Collections的区别

Collection是java.util下的接口,它是各种集合的父接口,继承于它的接口主要有Set和List

Collections是个java.util下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。

        List,Set,Queue接口都继承Collection。 直接实现该接口的类只有AbstractCollection类,该类也只是一个抽象类,提供了对集合类操作的一些基本实现。List和Set的具体实现类基本上都直接或间接的继承了该类。

java.util.Collections 是一个包装类。 它包含有各种有关集合操作的静态方法(对集合的搜索、排序、线程安全化等),大多数方法都是用来处理线性表的。此类不能实例化,就像一个工具类,服务于Java的Collection框架

Collections的一些实现功能

Collections.sort(list);针对集合进行原地排序
        具体实现 list.sort(null);
        在List接口中针对sort方法提供了默认实现
  
@SuppressWarnings({"unchecked", "rawtypes"})
default void sort(Comparator<? super E> c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c);  //针对数组使用Arrays.sort进行排序,在Arrays.sort中可以针对数组的规模在快排等多种排序算法中自动选择
        ListIterator<E> i = this.listIterator();
        for (Object e : a) {
                i.next();
                i.set((E) e);
        }
}
Collections.binarySearch(list, 7)使用折半查找对应的元素,可以返回在list中的下标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值