Map接口:
存储的是键值对(key,value),key值不能重复,value值可以重复。
Map接口下方法:
集合中常用方法解释:
// V put(K key, V value) 向集合中添加键值对
hashMap.put("11","xx");
// hashMap.put("22","yy");
System.out.println(hashMap.size());
//void clear() 将集合元素清空处理
// hashMap.clear();
//判断集合中是否存在指定的键 key 存在返回true 不存在返回false
//boolean containsKey(Object key)
boolean key = hashMap.containsKey("11");
// System.out.println(key);
//判断集合中是否存在指定的值value 存在返回true 不存在返回false
//boolean containsValue(Object value)
hashMap.containsValue("ss");
//集合的长度
// hashMap.size()
// System.out.println(hashMap.size());
//V get(Object key) 通过键key获取value
String s = hashMap.get("11");
Map接口下集合的遍历形式:
//通过entrySet遍历键值对
Iterator <Map.Entry <String, String>> iterator = hashMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry <String, String> entry = iterator.next();
System.out.println("key:"+entry.getKey()+",value:"+entry.getValue()+ " ");
}
//通过keySet遍历键
Iterator <String> iterator1 = hashMap.keySet().iterator();
while (iterator1.hasNext()) {
String key = iterator1.next();
System.out.print(key+" ");
}
//通过values()遍历值
Iterator <String> iterator2 = hashMap.values().iterator();
while (iterator2.hasNext()) {
String value = iterator2.next();
System.out.print(value+" ");
}
HashMap的介绍
特点:
1.存储的数据是键值对形式,key值不能重复,value可以重复、
2.key和value都可以为null
3.内部元素的顺序不能保证,即插入的顺序不一定是输出顺序
4.底层数据结构是哈希表
哈希表的介绍:
哈希表:key通过哈希函数映射到特定值的数据结构
(哈希函数的构建:
哈希函数的构造要能够让数据均匀的哈希到槽内,尽量少的减少哈希冲突
1.直接寻址法:
取关键字或关键字的某个线性函数值为散列地址,即H(key)=key或H(key)=a*key+b,其中a和b为常数(这种散列函数叫自身函数)
2.除留余数法:
取关键字被某个不大于散列表表长m的数p除后所得余数为散列地址。即H(key)=key MOD p,p<=m.不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。
)
哈希冲突:哈希函数f(x),f(m)=f(n),m不等于n
解决哈希冲突:链地址法,探测法(线性探测、随机探测)