JavaSE---Map

package com.an.collectiontest;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

/**
 * @author apy
 * @description
 * @date 2021/11/2 17:05
 */
public class MapTest {

    public static void main(String[] args) {
//        Hashtable


        Map<Integer, String> map1 = new HashMap<Integer, String>();
        map1.put(11, "11");
        map1.put(22, "22");
        long key1 = 11;
        System.out.println(map1.get(key1));


        Map<Long, String> map2 = new HashMap<Long, String>();
        map2.put(11L, "11");
        int key2 = 11;
        System.out.println(map2.get(key2));

        /**
         * Map的key:
         *  1、任何 引用类型的数据(即使 编写时为 基本类型,javac编译后会进行 转换为包装类)
         *       10: invokestatic  #4                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
         *
         *  2、由于 HashMap 通过 hash(key) && (key == key || key.equals(k)) 比较 key, 必须重写 hashCode()、equals();
         *
         *  3、避免 key 将 Integer与Long交叉使用,各自的hashCode()、equals()实现不一样:
         *      Long:
         *          public boolean equals(Object obj) {
         *              if (obj instanceof Long) {
         *                  return value == ((Long)obj).longValue();
         *              }
         *              return false;
         *          }
         *          public static int hashCode(long value) {
         *              return (int)(value ^ (value >>> 32));
         *          }
         *
         *      Integer:
         *          public boolean equals(Object obj) {
         *               if (obj instanceof Integer) {
         *                   return value == ((Integer)obj).intValue();
         *               }
         *              return false;
         *          }
         *
         *          public static int hashCode(int value) {
         *              return value;
         *          }
         *
         *   4、避免 key 使用 自定义类型,由于 自定义类型 的值易变,会导致 hashCode值重新计算,导致 get不到结果;
         *
         */
    }
}

  

上一篇:JavaSE基础(风清扬刘意)-面向对象编程


下一篇:Javase (手写版)(3)(接口,object,包装类)