Set集合
List有序的集合 Set是无序的
有序:取出的顺序和添加的顺序是一样的
无序:取出的顺序和添加的顺序无关
HashSet 哈希set
Set中不能存储相同的数据
add() | set.add(a) 在set中添加a元素 可以添加null | |
size() | set.size() 返回set集合的长度 | |
remove() | set.remove(a) 删除set中的a元素 |
TreeSet 红黑树
add存入数据,不能存入null,存入的数据的数据类型需一样
树的遍历
先序遍历 中序遍历 后序遍历
TreeSet遍历方式 中序遍历
TreeSet内部使用二叉树,内部节点是可以比较大小的
同一个TreeSet对象中存储的内容都应该是可比较的
默认情况下不能存储不同类型
对于上述数据
默认遍历
可以通过比较器控制遍历规则
两种方式
lambd表达式
实现comparable接口
LinkedHashSet是有序的集合Set
Map
存储键值对 键就是名字 值就是存储的对象
定义
hashmap里的key和value都可以是null,key是唯一的,重复的key的map会被覆盖掉,value可以重复
常用方法
put() | map.put(k,v) 将k键和v值存入map中 | |
get() | map.get(k) 通过存入的key获取存入的value对象 | |
remove() | map.remove(k) 通过key删除键值对,返回删除的value值 map.remove(k,v) 如果key和value都匹配,就删除,返回true 如果不匹配,不删除,返回false | |
containsKey() | map.containsKey(k) 搜索map中是否有k键 | |
containsValue() | map.containsValue(v) 搜索map中是否有v值 | |
keySet() | map.keySet() 获取所有的key值,返回set类 | |
values() | map.values() 获取所有的value值,返回collection类 |
TreeMap
key应该是可比较的
key不能是null值
TreeSet底层实现为TreeMap
Hashtable
Hashtable的key和value都不能是null值
Hashtable是线程安全的集合
LinkedHashMap
ConcurrentHashMap
线程安全,效率较高
HashMap
底层实现为数组加链表
Hash的数组默认容量是16
每次扩容两倍
扩容阈值是0.75 即容量为16时,内容达到16*0.75=12时便扩容
一个链达到8就该对链进行树化
一支树上的元素低于6个这个树就会退化成链
最小树化的容量阈值是64
如果数组长度没有达到64有限扩容
线程安全的Map有两个 Hashtable和ConcurrentHashMap(性能优异,锁颗粒度比较小)
泛型
广泛的数据类型
是确保类型安全的一种途径
定义
在类或方法上定义泛型
类型不安全
类型转换时没有明确对象的数据类型,进行强制数据类型转换
会抛出ClassCaseException(类型转换异常)