day004-Map类

Posted gzyzhui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day004-Map类相关的知识,希望对你有一定的参考价值。

 

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 }
View Code

 










以上是关于day004-Map类的主要内容,如果未能解决你的问题,请参考以下文章

day06-jsp

如何通过单击片段内的线性布局从片段类开始新活动?下面是我的代码,但这不起作用

elasticsearch代码片段,及工具类SearchEsUtil.java

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段

为啥片段类应该是公开的?

片段内部静态类和gradle问题