标签:概述 哈希表 key 顺序 增强 封装 span next 拼接
1、Map集合概述
Map是一个接口,只要是实现了该接口的类就是一个双列集合。
双列集合就是每次存储元素时需要存储两个元素的集合。
这两个元素称为键值对, Key Value ==>映射关系
特点:键必须是唯一的,只可以重复。
1.1 Map集合常用实现类
HashMap:底层是哈希表
LinkedHashMap:底层是哈希表 + 链表
Hashtable: 已经过时了,线程安全的,效率低,被HashMap取代了
1.2Map常用方法:
a)V put(K key, V value) //存储键值对
如果键存在,则使用新值代替旧值,返回旧值
如果键不存在,则直接存储键值对,返回null
b)V get(K key) //取值
如果键存在,返回值。如果键不存在,则返回null
c)V remove(K key) //删除
int size() //集合个数
void clear() //清空
boolean containsKey(K key) //包含键
boolean isEmpty() //是否为空
1.3 Map集合的遍历方式:
不能直接使用增强for或迭代器遍历
Map集合的遍历方式:
1、通过键找值
2、通过entrySet()获取entrySet
每一个键值对会封装成一个Entry对象
常用方法:
Set<K> keySet() //获取键集合
Set<Map.Entry<K,V>> entrySet?() //获取Entry集合
1.4 LinkedHashMap
继承HashMap, 能够保证存取顺序一致。
2. 练习
2.1 利用键盘录入,输入一个字符串,统计该字符串中各个字符的数量
*如用户输入字符串:"helloworld java",程序输出结果:h(1)e(1)l(3)o(2) (2)w(1)r(1)d(1)j(1)a(2)v(1)
*注:输出结果不要求顺序一致
a)操作步骤描述
1. 创建键盘输入对象
2. 使用nextLine从键盘中读取一行内容
3. 将字符串转换成字符数组
4. 创建map集合,用来存放字符:key是字符 value是字符出现的个数
5. 遍历字符数组
6. 拿到每个字符,去map中查看是否有保存对应的次数
7. 如果这个字符没有保存次数,就设置为1次
8. 如果这个字符有保存次数,就设置为原来的次数+1次
9. 创建字符串缓冲区对象
10. 按题目要求拼接字符串
11. 输出结果
b)代码实现
1 package com.yangzhihui.level02.test04; 2 3 import java.util.*; 4 import java.util.Map.Entry; 5 6 public class HashMapDemo11 { 7 public static void main(String[] args) { 8 Scanner sc = new Scanner(System.in); 9 10 System.out.println("请输入一个字符串:"); 11 String inputStr = sc.nextLine(); 12 13 //将字符串转成字符数组 14 char[] charArray = inputStr.toCharArray(); 15 16 Map<Character, Integer> map = new LinkedHashMap<>(); 17 18 for(char ch : charArray){ 19 if(map.get(ch) == null){ 20 map.put(ch, 1); 21 } 22 else { 23 int value = map.get(ch); 24 map.put(ch, value+1); 25 } 26 } 27 28 Set<Entry<Character, Integer>> entrySet = map.entrySet(); 29 for(Entry<Character, Integer> entry : entrySet){ 30 char key = entry.getKey(); 31 int value = entry.getValue(); 32 33 System.out.print(key + "(" +value + ")"); 34 } 35 36 } 37 }
标签:概述 哈希表 key 顺序 增强 封装 span next 拼接
原文地址:https://www.cnblogs.com/gzyzhui/p/9109338.html