Map多级映射

Map (映射)一一对应的关系 一对一、一对多

Map 是一种把键对象和值对象进行关联的容器, 而一个值对象又可以是一个Map, 依次类推,这样就可形成一个多级映射。

想想学习英语使用的词典软件,输入英文(key)后,软件会显示出对应的中文(value)。Map就是在内存中的这种结构。

Key(键):

  1. 和 set— 样,键对象不允许重复,这是为了保持查找结果的一致性。 如果有两个键对象一样, 那你想得到那个键对象所对应的值对象时就有问题了。

  2. 在使用过程中某个键所对应的值对象可能会发生变化, 这时会按照最后一次修改的值对象与键对应(就是key同一个key有多次值绑定,最后一个就会覆盖之前的)

  3. 可以使用 null 作为 Key
    Value(值):

  4. 值对象没有唯一性的要求, 你可以将任意多个键都映射到一个值对象上, 这不会发生任何问题( 不过对使用却可能会造成不便, 你不知道你得到的到底是那一个键所对应的值对象,所以请不要这样做)

  5. 可以使用 null 作为 Value

Map 有两种比较常用的实现: HashMap 和 TreeMap

常用的方法

方法名 说明
put(key , value) 储存数据
get(key) 通过key得到值
remove(key) 通过key删除对应的值(key当然也会删除)
entrySet() 获取Map所有的Key,返回一个Set集合
values() 获取Map所有的value,返回一个List 集合
containsKey(key) 判断Map中是否有输入的参数:key
containsValue(value) 判断Map中是否有输入的参数:value
size() 判断Map中数据的总数
clear() 清空Map中所有的数据
isEmpty() 判断Map中是否有数据

HashMap

HashMap 用到了哈希码的算法, 以便快速查找一个键。

public static void main(String[] args) {

    HashMap<String, String> zsInfo = new HashMap<>();

    zsInfo.put("name", "张三");
    zsInfo.put("height", "173CM");
    zsInfo.put("sex", "男性");

    for (Map.Entry<String, String> info : zsInfo.entrySet()) {
        System.out.println( info );
    }
}
负载因子,当容量使用到75%时,触发扩容的操作
DEFAULT_LOAD_FACTOR  = 0.75    负载因子 = 0.75
DEFAULT_INITIAL_CAPACITY = 16  默认的初始化容量=16,必须是2的整数次幂,原因是便于Hash运算,提高效率
TREEIFY_THRESHOLD = 8  树化_阈值 = 8  当长度大于8时,链表的查询会变慢,优化为树

TreeMap

TreeMap 是对键按序存放, 因此它便有一些扩展的方法, 比如 firstKey() 、lastKey() 等, 可以从TreeMap 中指定一个范围以取得其子Map

public static void main(String[] args) {

    TreeMap<String, String> tree = new TreeMap<>();

    tree.put("name", "Jack");
    tree.put("age", "22");
    tree.put("身高", "173");
    tree.put("sex", "man");
    tree.put("体重", "70KG");

    System.out.println("-------------------");
    for (Map.Entry<String, String> entry : tree.entrySet()) {
        System.out.println( entry );
    }
    System.out.println("-------------------");

    System.out.println("firstKey = "+ tree.firstKey());
    System.out.println("firstEntry = "+ tree.firstEntry());
    System.out.println("lastKey = "+ tree.lastKey());
    System.out.println("lastEntry = "+ tree.lastEntry());

}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容