Java学习——集合的使用(三)

Set集合

  • set集合特点:

    • 不包含重复元素的集合

    • 没有带索引的方法,所以不能使用for循环遍历

  • 创建集合对象,使用Set接口的泛型实现类HashSet

    • HashSet对迭代的顺序不做任何保证(例如,添加的顺序时1,2,3输出可能是2,3,1)

      Java学习——集合的使用(三)

关于哈希值

  • 哈希值是JDK根据对象的地址或者字符串或者数字,算出来的int类型的数值

  • Object类中有一个方法,hashCode(),可以获取对象的哈希值

  • hashCode的合同:

    • 只要在执行java程序期间多次在同一个对象上调用它,hashCode返回的必须是相同的整数,前提是不修改equals比较中使用的信息,在同一应用程序的一次执行到另一次执行,该整数不需要保持一致

    • 若两个对象根据equals方法相等,则这两个方法调用hashcode方法返回的值必须相等

    • 若两个对象根据equals方法不相等,就必须返回不同的hashcode值

  • 默认的不同的对象的哈希码是不同的:

    Java学习——集合的使用(三)

  • 通过方法重写,可以实现不同的对象的哈希值是相同的

    Java学习——集合的使用(三)

HashSet集合

  • HashSet特点:

    • 底层数据结构是哈希表

    • 对迭代顺序不做任何保证,也就是不保证放入和取出元素的顺序一致。

    • 没有带索引的方法,所以不能使用for循环进行遍历

    • 不包含重复的元素集合

  • HashSet集合存储学生对象

    使用HashSet列表存储学生对象的时候出现了重复元素,是因为Student类没有重写equals和hashCode方法

    Java学习——集合的使用(三)

    重写完方法后:

    Java学习——集合的使用(三)

LinkedHashSet集合

  • LinkedHashSet特点:

    • 哈希表和链表实现的Set接口,具有可预测的迭代次序

    • 链表保证了元素的有序性,所以说元素的放入和取出顺序是一致的

    • 由于哈希表保证元素的唯一,所以不会有重复的元素

      Java学习——集合的使用(三)

TreeSet集合

  • TreeSet集合特点

    • 元素有序,这里的顺序不是指存储和取出的顺序,而是按照一定的规则进行排序,具体排序方法取决于构造方法

      TreeSet():无参构造方法根据元素的自然顺序进行排序

      TreeSet(Comparator comparator):根据指定的比较器进行排序

    • 没有带索引的方法,所以不能使用普遍的for循环遍历

    • 由于是Set集合,所以不包含重复使用的集合

  • TreeSet使用无参构造,自然排序,且不包含重复添加的元素

    Java学习——集合的使用(三)

上一篇:Set集合


下一篇:List 和 Set 的区别