Set接口的再学习

是一个特殊的map;不允许元素重复,因为存入到了map的键上,

map的键是不能重复的,其实现类

HashSet无序,

TreeSet有序

SortedSet

会按照数字将元素排列,为可排序集合要保证被装入Set的元素

不会重复,需要元素的类型正确实现hashCode方法;

set没有getsize方法,所以遍历set集合只能使用迭代器iterator

java.util.HashSet

==========================================

  用哈希算法存放单个数据

  内部使用 HashMap 的键存放数据

       内部封装了一个HashMap

       数据存在HashMap的键的位置

  作为HashMap的键存储,所以不重复

  根据哈希值算出来的,所以无序

   (这个无序指的是数据的添加顺序和后来的排列顺序不同

  所以保存的数据无序并且唯一

 

  创建对象

  -----------------------------

    HashSet set = new HashSet();

 

  方法

  -----------------------------

    add(数据)

    remove(数据)

    size()

    iterator() 获得迭代器实例

    contains(数据)

    clear()

HashSet vs HashMap

如果在HashMap中有key值重复,那么后面一条记录的value覆盖前面一条记录。

Key值既然可以作为对象,那么也可以用一个自定义的类。比如:

m.put(new sutdent(“Liucy”,30),”boss”)

如果没有语句来判定Student类对象是否相同,则会全部打印出来。

当我们用自定义的类对象作为key时,我们必须在程序中覆盖HashCode()equals()

注:HashMap底层也是用数组,HashSet底层实际上也是HashMapHashSet类中有HashMap属性(我们如何在API中查属性)。HashSet实际上为(key.null)有键无值HashMap。有key值而没有value值。正因为以上的原因,TreeSetTreeMap的实现也有些类似的关系。

注意:TreeSetTreeMap非常的消耗时间,因此很少使用。我们应该熟悉各种实现类的选择——非常体现你的功底。

 

java.util.TreeSet

======================================

  内部使用 TreeMap 的键存放数据

  作为TreeMap的键存储数据,所以不重复

  有序,从小到大,所以能对内部因素排序

  SortedSet的实现类TreeSet自动为添加到TreeSet中的元素排序

  HashSet不同,TreeSet并不需要实现HashCode()equals()

  只要实现compareable接口并重写其compareTo()就可以排序

  (注:HashSet不调用CompareTo()

  如果要查询集合中的数据,使用Set必须全部遍历,所以查询的效率低

  创建对象

  -----------------------------------

    1. TreeSet set = new TreeSet();

   

    2. TreeSet set = new TreeSet(比较器对象);

 

  方法

  -----------------------------------

     HashSet 相同的方法

HashSet VS TreeSet

HashSet非常的消耗空间,TreeSet因为有排序功能,因此资源消耗非常的高,我们应该尽量少使用,而且最好不要重复使用。基于以上原因,我们尽可能的运用HashSet而不用TreeSet,除非必须排序。

 

LinkedHashSet

(能够保证元素的添加顺序):底层借助LinkedHashMap存储(哈希表)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值