**
HashMap
**
1.常用API
put()
get()
remove()
boolean containsKey(Object key)
boolean containsKey(Object key)
boolean isEmpty()
int size()
void putAll(Map<? extends K,? extends V> m)
2.Map的遍历方式
1)获取所有的key,并且得到对应的Set集合类型
map.keySet()
2)获取所有的value,并且得到对应的List集合类型
map.values()
3)获取所有的键值对entry,并且得到对应的Set集合类型
注意:
a.在set集合中只能存放一种泛型,所以键值对(entry)也是一个整体泛型类型
b.Entry是属于Map的内部接口,内部接口的使用方式和内部类一样
c.Entry的结构
获取键:
getKey()
获取值:
geyValue()
3.LinkedHashMap©
1)底层数据结构:数组+链表+双向链表
2)特点:
a.按照插入顺序进行排列
4.TreeMap©
1)底层数据结构:红黑树
2)作用:
a.对Map集合进行排序
5.Hashtable©
1.底层数据结构:数组+链表
2.和HashMap的区别
a.父类的不同
HashMap:继承AbstractMap类
Hashtable:继承Dictionary类
b.线程安全
HashMap:HashMap线程不安全
Hashtable:HashTable线程安全
c.版本不同
HashMap:JDK1.2开始
Hashtable:JDK1.0开始
d.扩容问题
HashMap:HashMap 哈希扩容必须要求为原容量的2倍
Hashtable:Hashtable扩容为原容量2倍加1
e.是否能存null值
HashMap:Hashmap是允许key和value为null值的
Hashtable:HashTable键值对都不能为空,否则包空指针异常
集合的概要
Collection(I)
|- List(I) - 有序,并且可以有重复值
|- ArrayList(C)
数据结构:顺序结构
特点: 查询快,增删慢
|- LinkedList(C)
数据结构:链式结构
特点: 查询慢,增删快
|- Vector(C)
数据结构:顺序结构
特点: 查询快,增删慢
带有锁
|- Stack(C) - 作为栈实现
|- Set(I) - 无序且唯一
|- HashSet(C)
数据结构:hash表(数组 + 链表)
|- SortedSet(I)
|- TreeSet(C)
数据结构:二叉树
|- Queue(I) - 先进先出
|-Deque(I) - 双端队列/栈
|- LinkedList(C)
Map(I)
|- HashMap(C) - 普通存储数据
数据结构:哈希表(散列表)|红黑树
默认初始容量:16
扩容因子:0.75
|-LinkedHashMap(C) - 存储有插入顺序
数据结构: 哈希表+双向链表
|-SortedMap(I)
|-TreeMap(C) - 对Map进行排序
|-Hashtable(C)
数据结构:哈希表
|-ConcurrentHashMap(C) - 并发(线程)
自然排序:Comparable(I)
重写compareTo() -> 比较 this 和 obj
this 比 obj 小
this 比 obj 大
this 和 obj 相同
this在前,obj在后 正序
obj在前,this在后 倒序
自定义排序: Comparator(I)
重写compare() -> 比较 o1 和 o2
正序: 前比后
倒序: 后比前