zoukankan      html  css  js  c++  java
  • MAP集合

    一、Map:与Collection并列。其是无序、不可重复的。

    (1)是无序。以(key,value)形式进行储存,key与value可以使用任何引用类型(相当于数学中的函数映射)

    (2)在jdk8中,其底层是数组+链表+红黑树的方式来实现。

    (3)HashMap:是Map的主要实现类,是线程不安全的,允许key伪null。

    a、是HashMap的子类LinkedHashMap:可以按照集合添加元素的顺序进行遍历

    (4)TreeMap:是Map的实现类,可以按照添加key的所有类进行排序(key必须伪同一类的对象)。

    (5)Hashtable:作为一个古老的实现类,是线程安全的,key和value不能为空。

    a、Properties:主要是用来操作文件的,它的key和value都是String类型。

    (6)CurrentMap:多线程中用到,可以使共享区分段。


    二、Map的结构特点

    (1)key:无序的,不可重复的,需要重写所在类的HashCode和equals方法。

    (2)value:可重复,需要覆写所在类的equals方法。


    三、以HashMap为例,Map的底层实现原理

    1.7之前包括1.7,用的使Entry[]数组---Entry是一个内部接口。

    1.8之后用Node[]数组

    (1)put(key,value):添加元素

    DEFAULT_LOAD_FACTOR:加载因子,默认值0.75 //构造方法中的

    threshold 临界值 ,默认值为0

    a、添加key的时候调用key所在类的HashCode方法得到一个哈希值,计算出其在底层数组中的储存位置

    b、如果当前位置没有元素,key、value正常添加,如果当前位置上有元素(有多个元素----以链表形式存在),需要比较添加所添加数据和已有数据的hash值。

    c、若hash值不同:key、value添加成功

    d、若hash值相同:继续调用euqals方法。若不相等则在链表末尾正常添加value,若相等则使用当前的value值替换当前位置的value值。

    ·补充说明:涉及到扩容问题的时候------当链表的长度大于8且数组中的元素大于64。

    ·可以把所有的key集合看作是一个Set集合

    ·可以把所有value的集合看作一个Collection集合

    ·一对key、value我们可以看做一个entry,所有的entry集合可以看作一个Set集合(其中key和entry是一一对应的)


    四、HashMap的常用方法

    1、put(key,value) //实际开发中我们喜欢把key用String类型储存。返回值为Object

    2、keySet() //元视图操作,返回一个Set集合,遍历key键。可通过迭代器

    3、values() //返回values,可通过迭代器

    4、entrySet() //返回所有entry的Set集合


    五、LinkedHashMap:可以根据添加的顺序遍历

    根据可添加的顺序遍历


    六、TreeMap:默认升序排列:添加key的所在类的属性,并进行行排序,自然排序,定制排序


    七、Properties:主要用于读取文件目录的操作,把文件中的值读取到内存中去


    八、Map常用方法

    1、添加:put(Object key,Object value)将指定key,value添加到集合中,;

    2、添加指定集合:putAll(Map m)将m中的所有key-value添加到当前集合;

    3、删除:Object remove(Object key)通过指定的key,移除key-value,返回value

    4、清空当前Map:void clear():清空当前的map(把集合中的元素清空,并不是把集合赋值)

    5、查询:get(Object key)获取指定key对应的value,返回值为Object

    6、containsKey(Object key)当前集合中是否包含指定的key,返回布尔类型

    7、containsValue(Object Value)判断当前集合是否包含指定的value,返回布尔类型

    8、size()代表添加元素的个数(不是代表集合的长度)

    9、isEmpty()判断当前集合是否为空

    10、equals(Object obj)判断当前集合和参数对象obj是否相等

    11、keySet()返回key构成的Set集合,返回值为Set //以下三个全为元试图炒作

    12、Collection values()返回value所构成的Collection集合

    13、Set entrySet()返回key-value对构成的一个Set集合

    九、Collections

    1、Collection:是List和Set的父接口

    2、Collections:用来操作Map、List、Set集合的工具类,提供了一系列静态方法从而对集合进行查询,替换等一系列操作

    (1)Object max(Collection)根据元素的自然排序返回指定集合中年的最大元素

    (2)Object max(Collection,Comparetor)根据Compartor(定制排序)指定顺序,返回指定集合中的最大元素

    (3)Object min(Collection)

    (4)Object min(Collection,Comparetor)

    (5)int frequency(Collection,Object)返回指定集合元素出现的次数

    (6)void Copy(List dest,List src)将src的内容复制到dest当中去,回覆盖原有内容

    (7)boolean replaceAll(List list,Object oldVal,Object newVal),将指定表中的新值替换就值


    十、排序操作:

    reverse(List)反转List中的元素

    shuffle(List)将List集合中的元素进行随机排序

    sort(List)根据元素的自然顺序对指定List集合进行排序(升序)

    sort(List,Comparator)定制排序

    swap(List,int,int)将集合中指定的两个元素位置进行交换

  • 相关阅读:
    git
    avalonJS
    push
    DataTables使用学习记录
    django models使用学习记录
    js操作记录
    部署网站遇到的问题
    ubuntu修改文件权限记录
    django发送邮件
    ubuntu使用记录
  • 原文地址:https://www.cnblogs.com/JQbiu/p/11248154.html
Copyright © 2011-2022 走看看