Java集合类-Set

  1. 为什么会有泛型
    早起的object 类型可以接收任意的对象类型, 但是在实际的使用中, 会有类型转换的问题, 也就存在着隐患, 所以java 提供了泛型来解决这个安全问题

如何使用泛型

没使用泛型报错的情况
Java集合类-Set

使用泛型
1.7 以后 右边的泛型可以不指定, 与左边一致
Java集合类-Set

如果泛型不明确指定, 默认是Object 类型
泛型值存在于编译时期为了确保强制转换不出错。

Java集合类-Set

Java集合类-Set

Java集合类-Set

Java集合类-Set

Java集合类-Set

Java集合类-Set

Java集合类-Set

Java集合类-Set

set 接口概述

不包含重复元素的集合, 不能通过索引值操作元素
Java集合类-Set
主要实现类:
1.HashSet 类概述(无序性, 不可重复性 底层结构是数组加链表)
不保证set 的迭代顺序(无序性, 不等于随机性, 存储的顺序并非按照数组索引的顺序添加, 是hash 值%16 算的数组下标)

特别是他不保证该顺序恒久不变(存入和取出的顺序不一致)

HashSet 如何保证元素唯一性
底层数据结构式hash 表(元素是链表的数组)
哈希表依赖于哈希值存储
添加功能底层依赖的两个方法
int hashCode()
boolean equals(object obj)

自动去重
去重原理:set 集合内部都是通过哈希表的结构去重, 依赖存储对象元素的hashcode 和equals 方法
去重步骤:
Java集合类-Set
Java集合类-Set

Java集合类-Set
Java集合类-Set
2. LinkedHashSet
. hashset 的子类LinkedHashset 可以保证存入和取出的顺序是一致的
实际上也是无序的, 但是在添加数据的同时, 每个数据还维护了2 个引用, 记录此时数据的前一个数据和后一个数据
优点, 对于频繁遍历的操作, 要优与hashset

  1. treeSet(有序, 不可重复)
    只能添加相同类的元素,同一类型的数据,可以按照指定类型排序
    Java集合类-Set

Java集合类-Set
Java集合类-Set