JAVA集合之map
2021/12/16 9:40:07
本文主要是介绍JAVA集合之map,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
简介
HashMap
TreeMap
Hashtable
JAVA并发容器ConcurrentSkipListMap和ConcurrentHashMap实现线程安全
简介
|————Map:双列数据,存储key-value对的数据,
|————HashMap:作为Map主要实现类,线程不安全的,效率高,存储null的key和value
|————LinkedHashMap:保证遍历元素时,按照添加顺序实现遍历
原理:在原有HashMap底层结构基础上,添加一堆指针,频繁遍历操作,执行效率高于HashMap
|————TreeMap:保证按照添加的key-value进行排序,实现排序遍历,此时考虑key的自然排序和定制排序,底层使用的是红黑树
|————Hashtable:作为古老的实现类,线程安全的,效率低,不能存储null的key和value
|————Properties:常用来处理配置文件,key和value都是String类型
Map结构
Map中的key:无序的、不可重复的,使用Set存储所有的key --->key所在的类要重写equals()和hashCode()(以HashMap为例
Map中的value:无序的、可重复的,使用Collection存储所有的value value所在类重写equals()
一个键值对:key-value构成一个Entry对象
Map中的entry:无序的,不可重复的,使用Set存储所有的entry
将Map中的数据,通过迭代器输出:Map —> Set —> Iterator
- 调用Map.entrySet()方法,将Map集合转换为Set集合,其中Set中的泛型为:Map.Entry<K,V>;
- 调用Set.iterator()方法,将Set集合转换为Iterator迭代器,泛型依然是:Map.Entry<K,V>;
- 调用Iterator的hasNext()、next()方法,循环取出Map.Entry<K,V>接口对象;
- 调用Map.Entry接口的getKey()获取key、getValue()获取value。
=========================================================================
HashMap
HashMap的底层:jdk7及以前 数组加链表
jdk8及以后 数组加链表加红黑树
=========================================================================
TreeMap
因TreeMap中添加key-value,要求key必须由同一个类创建的对象
因为要按照key进行排序,自然排序、定制排序
因TreeMap中添加key-value,要求key必须由同一个类创建的对象 因为要按照key进行排序,自然排序、定制排序 @Test public void treeMapTest1() { TreeMap map = new TreeMap((o1, o2) -> { if (o1 instanceof StudentSet && o2 instanceof StudentSet) { StudentSet s1 = (StudentSet) o1; StudentSet s2 = (StudentSet) o2; return Integer.compare(s1.getAge(), s2.getAge()); } else { throw new RuntimeException("类型错误"); } }); StudentSet st1 = new StudentSet(13, "lucky"); StudentSet st2 = new StudentSet(10, "jack"); StudentSet st3 = new StudentSet(23, "Tom"); map.put(st1, 89); map.put(st2, 78); map.put(st3, 100); // 方式一 Set entrySet = map.entrySet(); Iterator a = entrySet.iterator(); while (a.hasNext()) { Object obj = a.next(); Map.Entry entry = (Map.Entry) obj; System.out.println(entry.getKey() + "---->" + entry.getValue()); } // 方式二 Set keySet = map.keySet(); Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { Object key = iterator.next(); Object value = map.get(key); System.out.println(key + "----" + value); } }
=========================================================================
Hashtable
HashTable中hash数组默认大小是11,增加的方式是 old*2+1
HashTable是将整个哈希表锁住,采用sychronized同步方法,所以性能很低;
@Test public void propertiesTest() { FileInputStream fileInputStream=null; try { Properties properties = new Properties(); fileInputStream= new FileInputStream("jabc.properties"); //加载流对应的文件 properties.load(fileInputStream); String name=properties.getProperty("name"); String password=properties.getProperty("password"); System.out.println(name+"---"+password); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (fileInputStream != null) { try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }
JAVA并发容器ConcurrentSkipListMap和ConcurrentHashMap实现线程安全
这篇关于JAVA集合之map的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?