• Java集合之Set


    什么是Set数据结构

    • Set相对于List是简单的一种集合,具有和Collection完全一样的接口,只是实现接口不同,Set不保存重复的元素,存储一组唯一,无序的对象
    • Set中的元素是不重复的,实现细节可以看Map,因为这些Set的实现都是对应的Map的一种封装。比如HashSet是对HashMap的封装,TreeSet对应TreeMap
    • Set底层是一个HashMap,由于HashMap的put()方法是一个键值对,当新放入HashMap的Entry中key与集合原有Entry的key相同(hashCode()返回值相同,通过equals比较也返回true),新添加的Entry的value会将覆盖原来Entry的value,但key不会有任何改变
    • 允许包含值为null的元素,但最多只能有一个null元素

    常见的实现类

    • HashSet
      • HashSet类按照哈希算法来存取集合中的对象,存取速度比较快
      • 对应的Map是hashMap,是基于Hash的快速元素插入,元素无顺序
    • TreeSet
      • TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序
    //创建对象,HashSet和TreeSet api⼀样
    Set<Integer> set = new HashSet<>();
    //往容器⾥⾯添加对象
    set.add("jack");
    //清空元素
    set.clear();
    //返回⼤⼩
    set.size();
    //根据对象删除元素
    set.remove("jack");
    //是否为空
    set.isEmpty();

    两则区别

    • HashSet不能保证元素的排列顺序,TreeSet是SortedSet接口的唯一实现类,可以确保集合元素处于排序状态
    • HashSet底层用的是哈希表,TreeSet采用的数据结构是红黑树(红黑树是一种特定类型的二叉树)
    • HashSet中元素可以是Null,但只能有一个,TreeSet不允许放入Null
    • 一般使用HashSet,如果需要排序的功能时,才使用TreeSet(插入、删除、修改性能慢)
  • 相关阅读:
    501. Find Mode in Binary Search Tree
    [leetcode]Evaluate Reverse Polish Notation
    [leetcode]LRU Cache
    [mock]12月27日
    [mock]12月28日
    [leetcode]Max Points on a Line
    *[topcoder]JumpFurther
    [mock]12月11日
    *[topcoder]GUMIAndSongsDiv1
    [leetcode]Reorder List
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13388704.html
Copyright © 2020-2023  润新知