哈喽,大家好呀
下面写一道简单的题
题意:
给定一个字符串,请输出该字符串由哪些字符组成,每个字符出现几次?
思路:
我是运用了Map集合,首先创建Map集合存储键值对(key,value),添加集合中元素,每一个字符作为key,字符出现的次数作为value,其次将键值对存入Set集合中,调用map.entrySet方法,最后将键值对遍历,就得到结果啦
下面代码展示:
运行结果展示:
代码展示结束,下面补充下Map集合的一些相关知识
Map集合体系
1、Map集合特点
(1) 存储键值对(key-value),一个键值对为Map集合中一个元
(2) 键:无序、无下标、元素不允许重复(唯一性)
(3) 值:无序、无下标、元素可以重复
2、方法:
(1) V put(K key,V value):往map集合中添加一个键值对,如果添加键值对key不存在,则直接添加;如果添加键值对key在当前map中已经存在,则用新的value替换原来的value,被替换的value作为返回值返回
put两个含义:a. 添加 b. 修改:利用key修改value值
(2) int size():获取map中键值对个数
(3) V get(K key):根据key获取对应value值【重点】
(4) boolean containsKey(K key):判断当前map集合中是否包含某一个键,包含-true;不包含-false
(5) boolean containsValue(V value):判断当前集合中是否包含某一个值,包含-true;不包含-false
(6) V remove(K key):根据键删除对应的键值对,被删除的value作为返回值返回
3、实现类:
HashMap:JDK1.2版本,线程不安全,并发效率高,允许null作为key/value
Hashtable:JDK1.0版本,线程安全,并发效率低,不允许null作为key/value
LinkedHashMap:是HashMap子类,可以按照键添加的顺序进行存储
Properties:是Hashtable子类,是Map的实现类,键和值默认为String
(Properties pro = new Properties();),通常用于加载配置文件
4、遍历方式
(1) 键遍历:【开发应用重点】
a. 获取所有的键
Set<K> keys = map.keySet();
b. 遍历set集合获取每一个键:
for(K key:keys){
// 通过键获取对应的值
V value = map.get(key);
// 通过key和value操作
}
(2) 键值对遍历:
a. 获取所有的键值对Entry
Set<Map.Entry<K,V>> kvs = map.entrySet();
b. 遍历set集合获取每一个Entry
for(Map.Entry<K,V> kv : kvs){
// 从键值对获取键和值
K key = kv.getKey();
V value = kv.getVlaue();
}
5、补充
HashSet底层封装了HashMap,如果自定义类型的对象存储在HashMap中作为key,为了保证map的key不重复,自定义的对象对应类需要覆盖hashCode和equals方法;但是实际开发通常使用String/Integer类型作为Map的key,这些类已经覆盖了hashCode和equals方法。
HashMap存储原理:HashMap底层为数组(Entry/Node存储键值对),每次存储键值对时,调用key对应对象的hashCode方法获取对象的哈希码值,通过计算获取一个存储下标,如果存储下标上没有元素,直接存储,但是如果存储下标上已经有其他元素,此时调用key对应equals方法,true-键已经存储在map中,利用新的value替换对应的value值;false-键不存在,则成功添加,此时采用数组+链表形式进行存储
好啦,今天的分享到此为止啦
大家如果有不懂的欢迎私聊我呀
晚安喽~