zoukankan      html  css  js  c++  java
  • 16、集合--Map接口

    Map源码地址:https://www.cnblogs.com/Mrchengs/p/10842091.html

    前提概要:

    Map接口用于保存具有映射关系的数据

    Map集合中保存了两组值

    1、用于保存Map里的key

    2、用于保存Map里的value

    key和value都可是任何引用类型数据

    Map的key不允许重复

    即同一个map对象的任何两个key都通过equals()方法比较总还是false

    key和value之间是一一对应的关系

    即通过key就可以找到唯一的确定的value

    从Map中取数据时,只要指定的key就可以取出对应的value

    基本介绍:

    常用方法:

    添加、删除操作

    1、put(Object key,Object value):将互相关联的键值对存入

    2、Object remove(Object key):从映像中删除与key相关的映射

    3、put(Map t):j将来自特定映像的t全部添加到印象中

    4、clear():从映像中删除所有的映射

    查询操作

    get(Object key):根据关键字key进行查询对应的value

    containsKey(Object key):判断映像中是否存在关键值key

    containsValue(Object value):判断映像中是否 存在值value

    size():返回当前映射的数量

    isEmpty():判断映像中是否有任何映像

    视图操作:

    keySet():返回映像中所有关键字的视图集

    values():返回映像中所有值的视图集

    entrySet():返回Map.Entry对象的视图集,即关键字/值

    因为映射是唯一的,所以要用Set支持。

    接口和类

    1、Map.Entry接口

    通过map接口中的entrySet()方法可以返回一个实现Map.entry接口的对象集合

    集合中的每个对象都是底层Map中一个特定的键值对

    Map.Entry接口集合的迭代器可以获取每一个条目的键值对对值进行更改

    当条目通过迭代器返回后,除非是迭代器自身remove()方法或者迭代器返回的条目的setValue()方法

    其余对源Map外部的修改都会导致此条目集变得无效,同时产生条目行为未定义

    ---Object getKey():返回条目的关键字

    ---Object getValue():返回条目的值

    ---Object setValue(Object value):将相关映像中的值修改为value,并且返回旧值

    2、SortedMap接口

    用来保持键的有序顺序

    public interface SortedMap<K,V> extends Map<K,V> {
        //返回对关键字进行排序时的比较器
        Comparator<? super K> comparator();
      //返回[fromKey,toKey)范围内的SortedMap的视图集
        SortedMap<K,V> subMap(K fromKey, K toKey);
      //返回SortedMap的一个视图,其内各个元素的key都小于toKey
        SortedMap<K,V> headMap(K toKey);
      //返回SortedMap的一个视图集,其内各个元素的key都大于等于fromKey
        SortedMap<K,V> tailMap(K fromKey);
      //返回映像中第一个关键字
        K firstKey();
      //返回影像中最后一个关键字
        K lastKey();
      
        Set<K> keySet();
    
        Collection<V> values();
    
        Set<Map.Entry<K, V>> entrySet();
    }

    SortedMap接口是映像的视图(子集),在里面有两个端点提供了访问方法

    除了排序是作用于映射的键以外处理SortedMap和处理SotredSet一样

    添加到SortedMap实现类的元素必须实现Comparable接口

    否则必须给他的构造函数提供一个COmparator的接口实现

    类TreeMap是它的唯一实现

    因为对于映射来说,每个键只能对应一个值

    如果在添加一个“键/值”对时比较两个键产生了为0的返回值

    那么原始键对应的值被新值代替

    如果两个元素不相等则应该修改比较方法

    让比较方法和equals()方法效果一致

    3、AbstractMap抽象类

    和其他抽象集合相似,类AbstractMap覆盖了equals()和hashCode()方法以确保两个相等映射返回相同的哈希码

    如果两个映射大小相等,包含相同的键且每个键在着两个映射中对应的值都相同,则这两个映射相等

    映射的哈希码是映射元素哈希码的总和

    其中每个元素是Map.Entry接口的一个实现

    所以不论映射内部顺序如何,两个相等映射会报告相同的哈希码

    4、HashMap额TreeMap类

    提供了两个Map的实现

    在Map中插入、删除和定位是,HashMap是最好的选择

    如果要求按自然排序或自定义顺序遍历键那么选择TreeMap会更好

    使用hashMap要求添加的键类明确定义了hashCode()和equals()方法的实现

    TreeMap没有调优选项,因为该树总处于平衡状态

    ①、HashMap类

    为了优化hashMap空间使用,可以调优初始容量和负载因子

    --HashMap():构建一个空的哈希映像

    --HashMap(Map m):构建一个哈希映像,并且添加映像m为所有的映射

    --HashMap(int initialCapacity):构建一个拥有特定容量的空的哈希映像

    --HashMap(int initalCapacity,float liadFactor):构建一个拥有特定容量和加载引子的空的哈希映像

    ②、TreeMap类

    TreeMap没有调优选项,该树总处于平衡状态

    --TreeMap():构建一个空的映像树

    --TreeMap(Map m):构建一个映像树,并且添加映像m中所有元素

    --TreeMap(Comparator c):构建一个映像树,并且使用特定的比较器对关键字进行排序

    --TreeMap(SortedMap s):构建一个映像树,添加映像树s中的所有映射,并且使用与有序映像s相同的比较排序

  • 相关阅读:
    QtAV编译
    git 恢复到刚刚clone下来的状态
    select2 清除选中项解决办法
    mysql: 查看某库表大小
    C# Linq 交集、并集、差集、去重
    mvc ajax访问后台时session过期无法跳转到Login页面问题解决
    Asp.net:上传文件超过了最大请求长度
    Firebug 没死,活在 Firefox DevTools 中
    vs2015 加载项目的时启动:无法启动 IIS Express Web 服务器
    Visual Studio安装SVN插件
  • 原文地址:https://www.cnblogs.com/Mrchengs/p/10850727.html
Copyright © 2011-2022 走看看