Java学习笔记整理-Map - Go语言中文社区

Java学习笔记整理-Map


集合:Collection
Map:键值对 key-value映射表(默认
HashMap
Hashtable
concurrentHashMap
LinkedHashMap
SortedMap(I)->TreeMap
1.HashMap
Map<String,String>map=new HashMap<String,String>();
//增删改查
map.put(“hehe”,“123”);//增加,返回被替换的value值
map.put(“hehe”,“1234”);//修改,返回被替换的value值
map.get(“hehe”);//通过key获取value
map.remove(“hehe”)//通过key删除 key-remove-返回被删除的value值
迭代map的三种方式
1.迭代所有key的set视图
Setkeys=map.keySet();
Iteratorit=keys.iterator();
while(it.hasNext()){
Integer key=it.next();
System.out.println(key+"="+map.get(key));
}
2.获得value对应的collection(List)视图
Collectioncol=map.values();
for(String str:col){
System.out.println(str);
}
3.entry:key/name-value键值关系
Set<Entry<String,User>>set=map.entrySet();
for(Entry<String,User>entry:set){
entry.getKey();–键值关系中的key
entry.getValue();–键值关系中大的value
}
HashMap的底层实现原理:
Hash->HashSet
HashSet就是HashMap的key的部分
TreeSet就是TreeMap的key的部分
HashSet的存储过程->HashMap的存储过程
1.hashCode()计算位置
2.位置上如果没有元素,直接加入
3.位置上有元素,对比判断equals()方法比较
a.相等,不添加
b.和位置上的链表每一个节点判断不相等,添加到链表末尾
因为链表访问效率很低,所以尽量使每个位置上在这里插入图片描述的链表,长度要短
这就要求容量大,但是考虑到空间使用率,容量不能无限大,默认初始容量jdk提供16
后期数据量太大,要扩容,但是不能存满再扩容
扩容:容量改变,原来集合中的元素复制到新扩容的集合中,要重新计算位置
需要消耗时间,所以不能频繁扩容
综合考虑,当集合存储到75%的时候,进行扩容一倍
结论:hashMap初始容量16
加载因子 0.75

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/louloulouta/article/details/90677124
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-24 22:08:06
  • 阅读 ( 973 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢