HashMap集合

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());
        }
    }
}
上一篇:HashMap为什么是2倍扩容


下一篇:ARP