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(插入、删除、修改性能慢)

 

posted @ 2020-07-28 00:20  陈彦斌  阅读(294)  评论(0编辑  收藏  举报