- Set集合
- HashSet
(1)添加数据add()
List 有序的 Set无序的
有序:取出的顺序和添加的顺序是一样的
实例化Set集合
Set中不能存储相同的数据
利用equals来比较是否为同一个对象,以上例子为同一个对象,所以size只加1
- 可以存null
只可以存储一个null值,因为HashSet的底层实现是HashMap,它不允许存在相同的key值。
- 打印Set
- TreeSet 红黑树
- 实例化
- 添加数据add()
因为树集合会自动根据元素的自然顺序或提供的比较器进行排序,这使得遍历集合时可以得到有序的结果。所以添加的数据必须是同一种类型的可比较,所以后面不能添加字符串,也不能添加null值
- 遍历
- 先序遍历
先遍历根节点,然后遍历左子树,最后是右子树
- 中序遍历
先遍历左子树,然后遍历根节点,最后是右子树
- 后序遍历
先左子树,然后右子树,最后遍历根节点
TreeSet 遍历方式是中序遍历
- TreeSet
(1)TreeSet 内部使用二叉树 内部的节点都是可比较大小的,默认的是从小到大输出
(2)同一个TreeSet对象存储的内容都应该是可以比较的
(3)默认情况下不能存储不同类型
当Student实现Comparable接口时,改写里面比较的方法。
然后实例化一个 TreeSet对象来存储。
这样可以不用传参数
<Student>限制输入的数据只能是Student类
若Student类不实现Comparable,只能通过构造比较器Comparator<Student>,然后在声明TreeSet对象的时候将比较器作为参数,才能实现Student类数据的比较。
LinkedHashSet 是有序的集合Set
- Map
- Map
存的是键值对 键 就是名字 值 存储的对象
- 实例化
向上转型
- 存放数据put(key,value)和获取key值对应的value值get(key)
- 删除键值对remove(key)
可以通过存入的key,删除键值对,会返回删除的value值
- 是否包含key
- 是否包含value值
- 获取所有的key
- 获取所有的value值
key值是唯一的,如果添加一个key值相同的就会将之前的value值覆盖
- TreeMap
key应该是可比较的
key不能是null值
- Hashtable
key,value都不能是null值
是线程安全的集合
(1)添加数据put(key,value)
ConcurrentHashMap 线程安全 效率较高
- HashMap
底层实现 数值加链表
HashMap 的数组默认容量是16,每次扩容两倍
扩容阈值0.75*16 达到12就开始扩容
一个链达到8就对该链进行树化,一个树上的元素低于6个就会退化成链
最小树化容量阈64,如果数组的长度没有达到64 优先扩容
线程安全的Map Hashtable ConcurrentHashMap(性能优异 锁颗粒度比较小)
- 泛型
广泛的数据类型,确保类型安全的一种途径
1.定义 类或方法上定义泛型
(1)在类上定义泛型
(2)定义属性
(3)定义方法
- 返回的类型和传入的类型是同一种
- 定义上限
该函数的功能是定义一个上限,使用泛型方法来接收一个类型为J的参数j,其中J必须是List的子类。函数将接收到的参数值原封不动地返回。
- 定义下限
首先定义类的关系
然后定义
该方法只有在List<? super A> a的类型大于或等于A p传入的类型时才能成立。
在类型转换的时候没有明确对象的数据类型进行强制数据类型转换,会抛出ClassCaseException(数据转换异常),类型不安全
- 规范一个数据类型 确保类型安全
Key为String类型,value值为Object类型