Map接口:
集合框架中的另一个父接口
Map集合用于存储一一对应的元素数据。第一个对象可以作为索引,第二个对象作为值,称为key-value(键值对)
存储数据的特点:
(1)以key-value形式存储
(2)key与value都必须是引用类型
(3)key与value是单向一对一映射
(4)key可以为null
(5)key不能重复
存储机制:
Map是基于数组和链表的数据结构,进行存储数据的。
作为key的对象采用了hash算法计算存储的数组的位置(即散列数组、散列桶),如果计算出来的位置对应的数组位置没有元素,就添加在散列桶内,如果有元素,key的equals()方法返回值为false,就会存储在散列桶元素对应的单向链表中,如果equals()方法返回true,就进行替换(覆盖)
ps:使用Map集合时,作为key的数据类型应该重写equals()HashCode()
常用方法:
V put(K k,V v) 存储一对key-value,返回被替换的value值,如果不是替换,返回null
V get(K k) 通过key对象,获取对应的value对象,如果集合中没有此key则返回null
Map集合的遍历:
Set<K> keySet(); 用于获取Map中所有的key对象,返回一个Set集合
Set<Entry<K,V>> entrySet(); 将key-value封装成内部类的对象,返回Entry对象的Set集合
Collection<V> values(); 将Map集合中的所有value封装到一个Collection集合中
装载因子和HashMap优化:
装载因子:DEFAULT_LOAD_FACTOR=0.75
默认容量:DEFAULT_INITIAL_CAPACITY=1<<4; //1<<4 = 16 即数组默认容量为16
元素个数:size
当我们在创建一个HashMap对象时,底层数组的初始容量为16,当存储的数据个数size/DEFAULT_INITIAL_CAPACITY等于
DEFAULT_LOAD_FACTOR,数组开始扩容,此时最佳。如果小于0.75扩容,比较占内存,如果大于0.75扩容,操作的元素比较多
Map接口的子类:
HashMap与HashTable的区别:
(1)HashTable是一个古老的类,不建议使用
(2)HashTable是一个线程安全的类,HashMap线程不安全
(3)HashTable的key不能是null,HashMap的key可以是null
LinkedHashMap:
是HashMap的子类,使用链表来维护key-value的顺序,在迭代时,顺序与添加顺序相同
TreeMap:
是SortedMap子接口的实现类,使用了二叉树的数据结构维护填入集合的顺序
(1)自然排序
向TreeMap里添加的key对象可以实现Comparable接口,重写CompareTo()
(2)定制排序
作为key对象的数据类型,可以不实现Comparable接口,需要创建一个比较器对象Comparator对象,实现compare()方法
Properties:
是HashTable的子类型,用于封装属性文件的key-value信息,因为在文件里写的都是字符串,因此Properties的key和value都是字符串类型
java 同时存储 一对数据 java一对值存储
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
websockt一对一聊天java部分
websocket
java websocket -
QNetworkRequest参数设置
简 述: 了解QNetworkAccessManager/QNetworkReply/QNetworkRequest实现高层网络的操作http,书写一个简单地例子;然后写了一个小的 Qt例子,用来实现和验证它的空间的一些属性和功能的用法。 文章目录系统环境:http请求以及应答:QNetworkRequest:QNetworkAccessManager:QNetworkReply:运行效果:源码
QNetworkRequest参数设置 QNetworkAccess QNetworkReply QNetworkRequest 实现高层网络