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