Map 映射
通过某一个key键可以直接定位到一个Value值
存储方式以 键值对 存储 Key-Value
key无序还是一样,指的是存入顺序与取得顺序不一致
key无重复当然指的是 元素不能一致
Map基本使用
HashMap
TreeMap
Properties
HashMap
包 java.util
如何创建对象
基本方法
增删改查
增put(key,value) 存放一组映射关系 key-value
1.key存储的顺序与取得的顺序不同
2.不同的key可以存储相同的value
3.key若有相同的 则将原有的key覆盖而不是拒绝存入(跟Set刚好相反)
删 E = remove(key);
改 put = (key,value1) put(key,value2)
replace(key,newValue)
查 E = get(key)
遍历Map集合 key不一定什么样
//获取map集合的全部key
Set<Integer> it = map.keySet();
//通过迭代器遍历
Iterator<Integer> it = keys.iterator();
while(it.hashNext()){
Integer key = it.next;
String value = map.get(key);
System.out.println(key+"-"value);
}
API提供的其他方法
char containsKey(key) containsValue(value)
getOrDfault(key.defaultValue)如果key存在就返回对象对应的Value 若没有找到则返回默认返回值
isEmpty()
putAll(map)
putlfAbsent(key.value);//如果key不存在才向集合添加 如果key值不存在就不添加了
HashMap在什么情形下用?
想要存一组元素
数组 or 集合 如果存储的元素以后长度不变用数组 如果数组长度以后不确定用集合
如果发现长度以后不确定——————>集合
List Set Map
List家族有序的 存储有顺序用这个
ArrayList 更适合遍历轮循
LinkList 更适合插入删除
Stack LIFO
Set家族无重复 存储元素希望自动去掉重复元用这个
Hash 性能更高
Tree 希望存进去的元素自动去重复 同时还自动排序按(A-Z)字典顺序
Map家族k-v 通过唯一的K快速找寻v用这个
Hash 性能更高
Tree 希望存进去的元素能自动排序
Hash底层的数据结构
散列表形式 数组加链表
Person对象存入HashMap中 可以
HashCode方法 —>不同的对象可以产生相同的hashCode码
不同的hashCode码 不同的对象
//hashcode码
static fial int hash(Object obj){
int h;
return(key == null)?0:(h = key.hashCode())^(h >>>16);
}
数组:对象的hashCode码
发现hashCode码一致
当前数组后面串一个Node
先扫描数组(位置 )
继续扫描链表
数组中存储的是hash值
(key+value)包装成一个对象Entry
Map.entry