博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 集合框架之 Map
阅读量:6517 次
发布时间:2019-06-24

本文共 4300 字,大约阅读时间需要 14 分钟。

  1. Map 集合特点:
    • Map 集合一次添加一对元素, Collection 一次添加一个元素
    • Map 集合中存储的是键值对(类似夫妻), Map 集合必须保证键的唯一性
    • Map 称为双列集合, Collection 称为单列集合
  2. 常用方法:
// 1. 添加    value put(key,value); // 返回前一个与 key 关联的值, 如果没有, 返回 null// 2. 删除    void clear(); // 清空 Map() 集合    value remove(key); // 根据指定 key 删除这个键值对, 改变集合长度// 3. 判断    boolean containsKey(key);    boolean containsValue(value);    boolean isEmpty();// 4. 获取    int size(); // 获取键值对的个数    value get(key); // 通过键获取值, 如果没有该键,返回 null
  1. 取出 Map 集合中所有元素
// 第一种方式:/*1. 通过 keySet() 方法获取 Map 集合中所有的键所在的 Set 集合,2. 通过 Set 的迭代器获取到每一个键3. 对每一个键通过 Map 集合的 get(key) 方法获取对应的值*/public static void main(String[] args){    Map
map = new HashMap(); map.put(3,"wangcai"); map.put(7,"xiaoqiang"); map.put(9,"zhaoliu"); map.put(2,"lisi"); // 获取 Set 集合 Set
keySet = map.keySet(); Iterator
it = keySet.iterator(); while(it.hasNext()){ Integer key = it.next(); String value = map.get(key); System.out.println(key+"..."+value); }}// 第二种方式: 通过 entrySet() 方法// 该方法将键和值的映射关系作为对象存储到了 Set 集合中,// 而这个映射关系的类型就是 Map.Entry 类型(这个映射关系即结婚证)public static void main(String[] args){ Map
map = new HashMap(); map.put(3,"wangcai"); map.put(7,"xiaoqiang"); map.put(9,"zhaoliu"); map.put(2,"lisi"); Set
> entrySet = map.entrySet(); Iterator
> it = entrySet.iterator(); while(it.hasNext()){ Map.Entry
me = it.next(); // Map.Entry
表示类型 Integer key = me.getKey(); String value = me.getValue(); System.out.println(key+":::"+value); }}// Map.Entry 备注: 内部类. 例如:Outer.Inner.show(); class Outer{ static class Inner{ static void show();}}// 备注二: 因为 Map 中键是唯一的, 所以使用 Set 集合存储所有的键.

1222878-20170908230020913-1863175257.png

3.1 特例: 仅获取 Map 集合中所有的值

public static void main(String[] args){    Map
map = new HashMap(); map.put(3,"wangcai"); map.put(7,"xiaoqiang"); map.put(9,"zhaoliu"); map.put(2,"lisi"); Collection
values = map.values(); Iterator
it = values.iterator(); while(it.hasNext()){ System.out.println(it.next()); }}//备注: 因为 Map 集合中键所对应的值并不一定是唯一的, 所以 values() 方法返回值类型为 Collection
  1. Map 集合常见子类对象(请参照Set集合)
    • Hashtable : 内部结构是哈希表,是同步的. 不允许 null 作为键, null 作为值
      • Properties : 用来存储键值对型的配置信息, 可以和 IO 技术相结合
    • HashMap : 内部结构是哈希表,不是同步的. 允许 null 作为键, null 作为值
      • LinkedHashMap : 保证存入和取出的顺序一致
    • TreeMap : 内部结构是二叉树,不是同步的, 可以对 Map 集合中的键进行排序
  2. 练习
// "fdgavcbsacdfs" 获取该字符串中, 每一个字母出现的次数// 要求打印结果是: a(2)b(1)....;/*思路:对结果的分析发现,字母和次数之间存在着映射关系, 而且这种关系很多很多就需要存储, 能存储映射关系的容器有数组和 Map 集合关系的中的一方是有序编号吗? 不是!那就使用 Map 集合. 又发现可以保证唯一性的一方具备着顺序如, a, b, c...所以使用 TreeMap 集合这个集合最终应该存储的是字母和次数的对应关系步骤:1. 因为操作的是字符串中的字母, 所以先将字符串变成字符数组2. 遍历字符数组,用每一个字母作为键去 Map 集合中查询,如果该字母键不存在, 就将该字母作为键作为值存储到 Map 集合中如果该字母键存在, 就将该字母键对应的值取出并 +1, 再将该字母和 +1 后的值存储到 Map 集合中键相同,值会覆盖. 这样就记录住了该字母出现的次数3. 遍历结束, Map 集合就记录了所有字母出现的次数*/public class MapTest {    public static void main(String[] args){        String str = "fdgavc   +++ ==== $ %#  bsacdfs";        String s = getCharCount(str);        System.out.println(s);    }    public static String getCharCount(String str){        // 将字符串变成字符数组        char[] chs = str.toCharArray();        // 定义 Map 集合表        Map
map = new TreeMap
(); for(int i = 0; i
= 'a' && chs[i] <= 'z' || chs[i] >= 'A' && chs[i] <= 'Z')) continue; // 将数组中的字母作为键去查 Map 表 Integer value = map.get(chs[i]); // 判断值是否为 null // 第一种方式: if(value == null){ map.put(chs[i], 1); } else { map.put(chs[i], value+1); } // 第二种方式 int count = 0; // 计数器 if(value != null){ count = value; } count++; map.put(chs[i], count); } return mapToString(map); } private static String mapToString(Map
map) { // 使用 StringBuilder 存储字符串 StringBuilder sb = new StringBuilder(); Iterator
it = map.keySet().iterator(); while(it.hasNext()){ Charater key = it.next(); Integer value = map.get(key); sb.append(key+"("+value+")"); } return sb.toString(); }}

参考资料

转载于:https://www.cnblogs.com/linkworld/p/7496753.html

你可能感兴趣的文章
小记如何修改xen模块
查看>>
实时游戏对战引擎Photon
查看>>
C语言位操作控件属性
查看>>
nginx的安装及基本配置,及多个域名服务
查看>>
Servlet访问postgresql数据库并提取数据显示在前端jsp页面
查看>>
不改一行代码定位线上性能问题
查看>>
定义运算符
查看>>
git管理
查看>>
告别暗黄皮肤变水嫩皮肤的8个小习惯
查看>>
加强Eclipse代码自动提示的方法
查看>>
exchange online 用户疑问之许可证和用户数据归档
查看>>
QImage Mat IplImage 之间的相互转换
查看>>
使用eclipse与android studio 在开发自定义控件时的区别
查看>>
我的友情链接
查看>>
mysql学习笔记
查看>>
年年有鱼游戏Android源码项目
查看>>
java使用Iterator、for循环同步数据
查看>>
创建镜像iso文件
查看>>
C++类的存储
查看>>
ActiveReports 报表应用教程 (8)---交互式报表之动态过滤
查看>>