zoukankan      html  css  js  c++  java
  • Java学习:Map接口

    Map集合

    Collection接口: 定义了单列集合规范 Collection<E>

    • 每次存储一个元素 单个元素

    Map接口:定义了双列集合的规范 Map<K,V>

    • 每次存储一对元素

    java.util.Map<K,V>集合

    Map集合的特点:

    1. Map集合是一个双列集合,一个元素包含两值(一个key,一个value)
    2. Map集合中的元素,key和value的数据类型可以相同,也可以不同
    3. Map集合中的元素,key是不允许重复的,value是可以重复的
    4. Map集合中的元素,key和value是一一对应的
    java.util.HashMap<K,V>集合 implements Map<K,V>接口

    HashMap集合的特点:
    1.HashMap集合底层是哈希值:查询的速度特别的快

    • JDK.8之前:数组+单向链表
    • JDK.8之后:数组+单向链表/红黑树(链表的长度超过8):提高查询的速度

    2.HashMap集合是一个无序的集合,存储元素和取出元素的顺序有可能不一致

    java.util.LinkedHashMap<k,v>集合 extends HashMap<K,V>集合

    LinkedHashMap的特点:

    1. LinkedHashMap集合底层是哈希表+链表(保证迭代的顺序)
    2. LinkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一致的

    Map接口中的常用方法

    public V put (K key,V value):把指定的键与指定的值添加到Map集合中。

    返回值:v

    • 存储键值对的时候,key不重复,返回值V是null
    • 存储键值对的时候,key重复,会使用新的value替换map中重复的value,返回被替换的value值

    public V remove(Object key):把指定的值 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
    返回值:V

    • key存在,v返回被删除的值
    • key不存在,v返回null

    public V get(Object key)根据指定的键,在Map集合中获取对应的值。
    返回值:

    • key存在,返回对应的value值
    • key不存在,返回null

    boolean containsKey(Object key) 判断集合中是否包含指定的键

    • 包含返回true,不包含返回false

    Map集合的第一种遍历方式:通过键找值的方式

    Map集合中的方法:

    • Set<K> keySet() 返回此映射中包含的键的 Set 视图。

    实现步骤:

    1. 使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个Set集合中。
    2. 遍历Set集合,获取Map集合中的每一个Key
    3. 通过Map集合中的方法get(key),通过key找到value

    Entry键值对对象

    Map.Entry<K,V>:在Map接口中有一个内部接口Entry
    作用:当Map集合一创建,那么就会在Map集合中创建一个Entry对象,用来记录键与值(键值对对象,键与值的映射关系)

    Map集合遍历的第二种方式:使用Entry对象遍历

    Set<Map.Entry<K,V> entrySet() 返回此映射中包含的键的 Set 视图。
    实现步骤:

    1. Set<Map.Entry<K,V>> entrySet(): 把Map集合内部的多个Entry对象取出来存储到一个Set集合中
    2. 遍历Set集合:获取Set集合中的每一个Enter对象
    3. 获取Entry对象中的方法:getKey()获取key,getValue() 获取value

    HashMap存储自定义类型键值

    key:Person类型

    • Person类型必须重写hashCode方法和equals方法,以保证key唯一

    value:String类型

    • 可以重复
    java.util.linkedHashMap<K,V> extends HashMap<K,V>

    Map 接口的哈希表和链表列表实现,具有可预知的迭代顺序。

    底层原理:

    • 哈希表+链表(记录元素的顺序)

    Hashtable集合

    java.util.Hashtable<K,V>集合 implements Map<k,V>接口
    • Hashtable:底层也是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢
    • HashMap:底层是一个哈希表,是一个线程不安全的集合,是多线程的集合,速度快
    • HashMap集合(之前学的所有集合):可以存储null值,null键
    • Hashtable集合:不能存储null值,null键
    • Hashtable集合和Vector集合一样,在jdk1.2版本之后被更先进的集合(HashMap,ArrayList)取代了
    • Hashtable的子类properties依然活跃在历舞台
    • Properties集合是一个唯一和I/O流相结合的集合
  • 相关阅读:
    内部类
    java的静态方法多态和匿名对象
    java的重载 和重写
    java多态成员的特点
    java 接口的概念
    linux时间修改-hwclock和date
    mysql配置主从复制和常见问题
    mysql日志种类、二进制日志模式、mysqlbinlog解析二进制日志
    mysql主从复制介绍
    mysql备份与还原-mysqldump备份、mysql与source还原
  • 原文地址:https://www.cnblogs.com/cainiao-chuanqi/p/11223241.html
Copyright © 2011-2022 走看看