package Map01;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* @version 1.0
* @ClassName HashMap
* @category javaSE
* @QQ 1826286736
* @Author ${每特教育JY-010-小萌新}
* @Date 2021/11/27 11:22
**/
public class HashMap01 {
/**
* MyHashMap<键, 值>
* HashMap是Map下的实现类,底层通过哈希表(数组+链表+红黑树)存储数据 无序,底层采用散列机制存放数据
* 允许key和Value为null,也可以是自定义对象,但是key只能有一个null 存放于index为0 的位置
* 非线程安全,多个线程同时操作同一个HashMap实例所做的修改在线程间不同步
* 遍历时不保证任何顺序,跟元素插入顺序或者访问顺序无关
* 底层通过数组加链表实现,jdk1.8后加上红黑树。当链表长度超过8开始使用红黑树数据结构存储数据
* 当链表长度超过8并且集合元素超过64个时开始使用红黑树数据结构存储数据
* 初始容量为16,当占用75%后开始自动扩容,最大容量为1<<30也就是2的30次方
* 重复数据的判断依据:键的hashCode值方法和equals方法
* 存储一对数据(Key-Value),无序、无下标,键不可重复,值可重复。
*/
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
// put(K key,V value) //将对象存入到集合中,关联键值 key重复则覆盖原值
map.put("诸葛亮", "法师");
map.put("李信", "射手");
map.put("狄仁杰", "战士");
map.put("后裔", "坦克");
// 根据键获取其对应的值
System.out.println(map.get("诸葛亮"));
// size返回集合的存储元素个数
System.out.println(map.size());
// 通过key删除元素
map.remove("后裔");
// 清空集合
// map.clear();
/**
* 通过keySet()遍历
* 先获取到key 在通过key找到Valu
* 遍历效率不如entrySet
*/
System.out.println("---通过keySet()遍历----");
for (String key : map.keySet()
) {
System.out.println(key + "----" + map.get(key));
}
/**
* 通过entrySet遍历
* 底层把Key和Value封装成键值对存放于Entry集合
* 遍历效率高于keySet()
*/
System.out.println("---通过entrySet遍历---");
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
System.out.println(entry.getKey() + "---" + entry.getValue());
}
}
}