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)代码实现

 package com.yangzhihui.level02.test04;

 import java.util.*;
import java.util.Map.Entry; public class HashMapDemo11 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:");
String inputStr = sc.nextLine(); //将字符串转成字符数组
char[] charArray = inputStr.toCharArray(); Map<Character, Integer> map = new LinkedHashMap<>(); for(char ch : charArray){
if(map.get(ch) == null){
map.put(ch, 1);
}
else {
int value = map.get(ch);
map.put(ch, value+1);
}
} Set<Entry<Character, Integer>> entrySet = map.entrySet();
for(Entry<Character, Integer> entry : entrySet){
char key = entry.getKey();
int value = entry.getValue(); System.out.print(key + "(" +value + ")");
} }
}

day004-Map类的更多相关文章

  1. 探究Java中Map类

    Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象.       Map的接口       Map---实现Map       Map.Entry--Map的内部 ...

  2. 关于 Go 中 Map 类型和 Slice 类型的传递

    关于 Go 中 Map 类型和 Slice 类型的传递 Map 类型 先看例子 m1: func main() { m := make(map[int]int) mdMap(m) fmt.Printl ...

  3. ArcGIS API for JavaScript 入门教程[5] 再讲数据——Map类之底图与高程

    [回顾]前4篇交代了JsAPI的背景.资源如何获取,简介了数据与视图分离的概念与实现,剖析了页面的大骨架. 这篇开始,讲Map类. 转载注明出处,博客园/CSDN/B站/知乎:秋意正寒 目录:http ...

  4. Map类

    Map类 方法 方法名 返回类型 说明 addLayer(layer, index?) layer 增加一个esri图层到map中,示例: var baseMapLayer = new ArcGIST ...

  5. map 类简介和例程

    一.标准库的map类型 使用map得包含map类所在的头文件 template < class Key, class Type, class Traits = less<Key>, ...

  6. Java Map类常用方法

    关于Map集合中常用的方法: void clear(); 清空Map boolean containsKey(Object key); 判断Map中是否包含这样的key boolean contain ...

  7. 【总结整理】arcgis js api的Map类

    关于ArcGis for javascrept之Map类   ArcGis for javascrept_ESRI_Map类:  1. 构造方法:esri.Map(); 参数: extent 如果设置 ...

  8. Eigen库学习---Map类

    Eigen中定义了一系列的vector和matrix,相比copy数据,更一般的方式是复用数据的内存,将它们转变为Eigen类型.Map类很好地实现了这个功能. Map定义 Map(PointerAr ...

  9. Leaflet:Map类属性及方法

    1.初始化 L.map(<String> id , options ?) //用地图div的id创建 L.map(<HTMLElement>el , options?) //用 ...

  10. ArcGIS API for JavaScript 入门教程[6] 再讲数据——Map类之可操作图层

    [回顾]上篇交代了Map是各种图层(不管是实际上的图层还是由图层构成的对象)的容器,是数据的容器,并不作显示(由视图类绘制).并重点讲解了由图层构成的复杂图层——高程属性ground和底图属性base ...

随机推荐

  1. Django2.0以上版本的URL的正则匹配问题

    正则表达式形式的URL匹配问题: 1.导入re_path from django.urls import path,re_path 2.进行正则匹配 re_path('detail-(\d+).htm ...

  2. js-带操作的赋值表达式

    带操作的赋值表达式为: a op= b 这里op代表一个运算符,这个表达式等价于: a = a op b 这里需要特别注意:在第一个表达式中,表达式a计算了一次,而在第二个表达式中,表达式a计算了两次 ...

  3. Entity Framework 更新带外键的实体为null

    using (var ctx = new PortalContext()){    var city = ctx.Cities.Find(42);    ctx.Entry(city)        ...

  4. P1415 拆分数列

    传送门 DP数列长度过大无法枚举,考虑DP设f1[i]储存以第i个字符为结尾时,的最后一个数最小时,这个数的开头的位置(很难想有木有)OK,状态有了,方程想一想就出来了:设$num[i][j]$为数列 ...

  5. Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot(二分或者尺取)

    题目哦 题意:给出一个序列,序列有四个字母组成,U:y+1,D:y-1 , L:x-1 , R:x+1;   这是规则 . 给出(x,y) 问可不可以经过最小的变化这个序列可以由(0,0) 变到(x, ...

  6. hdu 1556 涂气球 线段树(区间更新~对区间[x,y]更新,求任意节点被更新的次数)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  7. spring test: 配置文件优先级

    application.properties 默认 application-xxx.properties 高 systemEnvironment 高 test/main/resources/ 同名文件 ...

  8. 对四次挥手中的TIME_WAIT状态的学习

    TIME_WAIT状态不必多说    是属于四次挥手中的一种特殊状态 作用有两点简单明了  不废话 (1)可靠的实现TCP全双工连接的终止 (2)允许老的重复的.迟到的分节在网络中消逝        ...

  9. Head First 设计模式笔记(适配器)

    1.定义: 将一个类的接口转换成客户期望的另外一个接口.适配器让原来不兼容的类可以合作无间. 例子:插座转接头. 2.类图: 3.说明: 埋坑 4.例子 埋坑

  10. Oracle基础篇--00引言

    今天开始,复习oracle基础.主要是以前培训的时候的文档作为结构来梳理知识点,主要目的是把Oracle基础打的扎实点.后面要转做后台开发,或者工作中需要用到数据库知识时也不至于临时抱佛脚. 一直以来 ...