zoukankan      html  css  js  c++  java
  • java集合 :set 学习

    Set集合


     1.HashSet
      只去重复, 没有顺序
      HashSet的add方法会调用hashCode和equals, 所以存储在HashSet中的对象需要重写这两个方法.


     2.TreeSet
      去重复, 并且可以按照某种顺序排序
      TreeSet的add方法会将对象转为Comparable, 然后调用compareTo方法, 所以存储在TreeSet中的对象必须实现Comparable, 重写compareTo方法


     3.LinkedHashSet
      HashSet的子类, 去重复, 并且保留存储顺序


     4.迭代方式
      使用迭代器Iterator
      使用增强for循环 

     

     HashSet原理:
      
      /*
     * 如果我们希望一个集合有去重复的功能, 可以在它的add方法中检查要添加的对象在集合中是否存在. 
     * 迭代集合中每个元素, 和要添加的比较, 如果相同, 就不存.
     * 
     * 如果使用上述方法, 当集合元素特别多的时候, 效率会很低.

     *例如: 集合中有1万个元素, 当存储下一个的时候, 需要和前面1万个都比较, 效率较低.
     * 
     * HashSet的工作原理:
     *   每次存储对象的时候, 调用对象的hashCode()方法, 计算一个哈希值. 在集合中查找是否包含哈希值相同的元素.
     *    如果没有哈希值相同元素, 直接存入.
     *    如果有哈希值相同的元素, 逐个使用equals()方法比较.
     *     比较结果全为false就存入.
     *     如果比较结果有true则不存.
     * 
     * 如何将自定义类对象存入HashSet进行去重复
     *   类中必须重写hashCode()方法和equals()方法
     *   equals()方法中比较所有属性
     *   hashCode()方法要保证属性相同的对象返回值相同, 属性不同的对象尽量不同

        网上找到详细介绍: http://zhangshixi.iteye.com/blog/673143

       TreeSet原理:
       
       
       /*
     * TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法
     * 
     * Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存储的时候出现异常(没有顺序)
     * 
     * 如果想把自定义类的对象存入TreeSet进行排序, 那么必须实现Comparable接口
     *   在类上implement Comparable
     *   重写compareTo()方法
     *   在方法内定义比较算法, 根据大小关系, 返回正数负数或零
     *   在使用TreeSet存储对象的时候, add()方法内部就会自动调用compareTo()方法进行比较, 根据比较结果使用二叉树形式进行存储

    网上找到详细介绍:http://www.tuicool.com/articles/jqyUZn

  • 相关阅读:
    质量属性的六个常见属性应用场景(淘宝篇)
    软件架构师如何工作?
    寒假学习第十五天
    寒假学习第十四天
    ADMEMS方法体系:3个阶段,一个贯穿环节之Refined Architecture阶段阅读感悟
    《企业应用架构模式》阅读笔记一
    《重构:改善既有代码的设计》阅读笔记三
    大数据分析01——数据爬取
    《重构:改善既有代码的设计》阅读笔记二
    kettle--Trans插件之输出
  • 原文地址:https://www.cnblogs.com/mpxBlog/p/4538406.html
Copyright © 2011-2022 走看看