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)将集合中指定的两个元素位置进行交换

原文地址:https://www.cnblogs.com/JQbiu/p/11248154.html