zoukankan      html  css  js  c++  java
  • Java数据结构之Set学习总结

    前言:

       前面介绍了Java的数据结构List、Map,今天抽空学习总结一下另一种数据结构Set。

    Set介绍

       Set相对于List、Map是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。

    特点:

    •  它不允许出现重复元素;
    • 不保证和政集合中元素的顺序
    • 允许包含值为null的元素,但最多只能有一个null元素

    Set是一个接口,实例化Set可以采用下面的方式:

    • HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快 
    • TreeSet :TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序 

    Set的基本操作:

    •  boolean add(Object o)   :向集合中加入一个对象的引用
    • void clear()                        :删除集合中所有的对象,即不再持有这些对象的引用
    • boolean isEmpty()           :判断集合是否为空
    • boolean contains(Object o): 判断集合中是否持有特定对象的引用
    • Iterartor iterator()              : 返回一个Iterator对象,可以用来遍历集合中的元素
    • boolean remove(Object o):从集合中删除一个对象的引用
    • int size()                               :返回集合中元素的数目
    • Object[] toArray()                 :返回一个数组,该数组中包括集合中的所有元素

    Set的使用

    添加数据

    Set<Integer> hashSet = new HashSet<Integer>();
     hashSet.add(3);
     hashSet.add(2);
     hashSet.add(5);
     hashSet.add(1);
     //模拟添加一个重复数据
     hashSet.add(2);
     Log.e(TAG,"set hashSet :"+hashSet+" size : "+hashSet.size());
    
     Set<Integer> treeSet = new TreeSet<>();
     treeSet.add(3);
     treeSet.add(2);
     treeSet.add(5);
     treeSet.add(1);
     Log.e(TAG,"set treeSet :"+treeSet +" size : "+treeSet.size());

    运行结果:

     通过运行结果可以看出,Set是不可重复的,TreeSet是有序的,HashSet是无序的。

    TreeSet实现排序默认是升序,想要实现自定义排序可以通过传进去一个Comparator或者TreeSet的添加对象实现Comparator接口。

    Set遍历

    for循环方式

      for (Integer integer :hashSet){
                Log.e(TAG,"set integer :"+integer);
       }

    迭代器方式

    Iterator<Integer> iterator =hashSet.iterator();
    while (iterator.hasNext()){
         Integer integer=iterator.next();
         Log.e(TAG,"set integer :"+integer);
       }

    知识扩展:

     最近在阿里java开发手册上看到了这句话:Map/Set 的 key 为自定义对象时,必须重写 hashCode 和 equals。这里Set集合中放入的是String类型,假如我们放入一个自己定义的类实例的时候,比如Person类实例,这时候我们要自己重新hashcode和equal方法,用自己的关键字段来重写,因为当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致;如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经加进去了,就不会再增加新的对象,否则加进去

    总结:

     主要重新熟悉一下Map这种数据结构,更好的在项目中使用不可重复的数据结构。

  • 相关阅读:
    Ehcache缓存回收策略
    [字符编码]Invalid byte 1 of 1byte UTF8
    JavaScript 单例模式
    Java程序员应该了解的10个设计原则
    医疗基本知识之医嘱篇(二)医嘱组成及规范
    VC++ (三)虚函数与重载
    VC++ (一)类的强制转换
    还是一个医学伦理问题,医疗费用高怪谁?
    电子病历开发经验共享 —— 2009年一时兴起写在某个论坛上的,转抄留恋。
    VC++ (二)类的访问级别
  • 原文地址:https://www.cnblogs.com/whoislcj/p/6535251.html
Copyright © 2011-2022 走看看