Set集合各个实现类的基础概念

                                                 Set集合各种实现类性能分析         
HashSet
  •  是基于Hash算法来实现的,功能是能快速查到到检索的对象,hash算法在于速度,查询某个元素是根据hashCode()值计算出存储位置从而找得的
  • 不会记住添加顺序.添加顺序位置随机
  • 不会添加重复元素,在同一个集合输入相同元素,add()方法返回false,且新元素不会加入
  • HashSet类似于HashMap的key,把key封装起来就HashSet,
  • HashSet访问元素也是根据hashCode()的值来快速定位
  • HashSet比较两个元素相等的标准是通过equals()方法与hashCode( )方法比较的对象返回值相等,但如果两个元素的equals相等,hashCode()不相等也是会添加成功
 
        代码如下:
public static void main(String[] args) {
       HashSet<String> set=new HashSet<String>();
       set.add("小陈");
       set.add("小红");
       set.add("小花");
       set.add("小明");
       set.add("小亮");
       //并不会添加相同元素
       set.add("小陈");
       for (String obj: set) {
             System.out.println(obj);
       }
}             

结果是:   小陈 小明 小亮 小红 小花    
可以看来并不会添加相同元素进来



LinkedHashSet
  •   也是根据hashCode()来访问元素位置,但同时使用链表来维护元素的次序,使元素维持插入的顺序保存起来,遍历输出后也是按照添加顺序输出
  • 也不允许集合元素重复。
  • 因为需要维持元素的插入顺序,性能比HashSet低
  • 访问Set里的全部元素有很好的性能,因为它以链表来维护顺序
代码如下
public static void main(String[] args) {
       LinkedHashSet itn=new LinkedHashSet();
       itn.add(5);
       itn.add(2);
       itn.add(8);
       itn.add(10);
       Iterator abn=itn.iterator();
//使用lambda表示式来来遍历集合,减少过多的代码
       abn.forEachRemaining(obj ->System.out.println("排序元素是:"+obj));
}

结果是:
元素的集合是5
元素的集合是2
元素的集合是8
元素的集合是10

TreeSet
  • 要求内部元素实现Comparable接口
  • 使用树结构实现(红黑树),集合中的元素进行排序
  • 其中自然排序与自定义排序

代码如下
public static void main(String[] args) {
        TreeSet itn=new TreeSet();
        itn.add(65);
        itn.add(30);
        itn.add(34);
        itn.add(21);
        Iterator st=itn.iterator();
//使用lambda表示式来来遍历集合,减少过多的代码
        st.forEachRemaining(ele ->System.out.println("元素的集合是"+ele));
 }

结果是:
元素的集合是21
元素的集合是30
元素的集合是34
元素的集合是65
总结:Set集合性能分析 HashSet性能是比TreeSet好(在添加查询等方面,因为TreeSet需要在额外的红黑树来维持排序,只有当需要保持一个排序的Set才使用TreeSet,不然都使用HashSet
LinkedHashSet对于普通的插入与删除比HashSet慢,但有了链表,遍历LinkedHashSet会快很多
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值