这一章节我们来讨论一下填充容器的还有一个方面Map。之前的两个章节我们都是用list来作为容器。这一章节我们使用Map。

还有在这里解释一下为什么一直都使用生成器这个东西,事实上他就是建造者设计模式,它基本的作用就是生产复杂的对象,并且满足各种需求的变化(灵活性)。

还有为什么花这么多章节来讨论填充容器,主要由于填充容器包含比較多的知识点,知识点列举:

(1)泛型

(2)建造者设计模式

(3)容器的填充方法(list 的add。map的put等)

进入主题,我们来讨论一下Map的填充

1.样例

package com.ray.ch14;

import java.util.HashMap;
import java.util.Random; public class Test {
public static void main(String[] args) {
MyMap<Integer, String> myMap = new MyMap<Integer, String>(
new LetterGenerator(), 10);
for (Integer key : myMap.keySet()) {
System.out.println("key:" + key + " value:" + myMap.get(key));
}
new HashMap().putAll(myMap);// 这样就能够通过putAll生成一组对象。
}
} interface Generator<T> {
T next();
} class LetterGenerator implements Generator<Pair<Integer, String>> {
private String str = "The PLA Daily must adhere to the leadership "
+ "of the Communist Party of China (CPC) and serve the PLA, "
+ "which is also under the CPC leadership, said Xi, who is "
+ "also general secretary of the CPC Central Committee and "
+ "chairman of the Central Military Commission (CMC)."; private Integer index = str.split(" ").length - 1; @Override
public Pair<Integer, String> next() {
int param = new Random().nextInt(index);
return new Pair<Integer, String>(param, str.split(" ")[param]);
}
} class Pair<K, V> {
public final K key;
public final V value; public Pair(K key, V value) {
this.key = key;
this.value = value;
}
} @SuppressWarnings("serial")
class MyMap<K, V> extends HashMap<K, V> { public MyMap(Generator<Pair<K, V>> generator, int count) {
for (int i = 0; i < count; i++) {
put(generator.next().key, generator.next().value);
}
}
}

输出:

key:1 value:adhere
key:32 value:chairman
key:2 value:the
key:21 value:CPC
key:23 value:PLA
key:22 value:to
key:25 value:leadership,
key:24 value:CPC
key:9 value:China
key:30 value:serve

解释一下上面的代码:

(1)目的:生成一组(数字,字符串)的Map,数字和字符串都是随机的

(2)我们须要组装类Pair。由于须要填充Map,Pair 的Key和Value我们都是标注为final。这样方面使用。

(3)LetterGenerator实现Generator,然后把所须要的对象组装成Pair

(4)MyMap继承HashMap,扩展新的构造器

(5)通过Map里面的putAll或者Collections.addAll方法。就能够生产一个新的Map

2.我们改动一下上面的样例,变换MyMap构造器(这里的构造器能够放在一起,可是放在一起代码会比較长,因此我们变换了构造器。而不是在上面添加)。以满足各种的需求。

package com.ray.ch14;

import java.util.HashMap;
import java.util.Random; public class Test {
public static void main(String[] args) {
MyMap<Integer, String> myMap = new MyMap<Integer, String>(
new KeyGenerator(), new ValueGenerator(), 10);
for (Integer key : myMap.keySet()) {
System.out.println("key:" + key + " value:" + myMap.get(key));
}
new HashMap<Integer, String>().putAll(myMap);// 这样就能够通过putAll生成一组对象。 }
} interface Generator<T> {
T next();
} class KeyGenerator implements Generator<Integer> { private Integer index = 10; @Override
public Integer next() {
return new Random().nextInt(index);
}
} class ValueGenerator implements Generator<String> {
private String str = "The PLA Daily must adhere to the leadership "
+ "of the Communist Party of China (CPC) and serve the PLA, "
+ "which is also under the CPC leadership, said Xi, who is "
+ "also general secretary of the CPC Central Committee and "
+ "chairman of the Central Military Commission (CMC)."; @Override
public String next() {
return str.split(" ")[new Random().nextInt(str.split(" ").length - 1)];
}
} @SuppressWarnings("serial")
class MyMap<K, V> extends HashMap<K, V> { public MyMap(Generator<K> keyGenerator, Generator<V> valueGenerator,
int count) {
for (int i = 0; i < count; i++) {
put(keyGenerator.next(), valueGenerator.next());
}
}
}

输出:

key:0 value:to
key:1 value:CPC
key:3 value:Central
key:6 value:the
key:7 value:the
key:8 value:and
key:9 value:under

上面的代码我们把Pair这个组合类分开来实现。

总结:我们上面介绍了Map的填充。

这一章节就到这里,谢谢。

-----------------------------------

文件夹

从头认识java-15.1 填充容器(3)-填充Map的更多相关文章

  1. 从头认识java-15.1 填充容器(2)-利用Collection的addAll方式

    接着上一章节,我们继续介绍填充容器. 这一章节我们结束还有一种填充容器的方式:addAll 样例: package com.ray.ch15; import java.util.ArrayList; ...

  2. 从头认识java-15.1 填充容器(1)-利用Collection构造器的方式

    这一章节我们来介绍一下填充容器. 就像数组一样,Arrays.fill是填充方法,在容器里面也有. 1.Collections.nCopies 这种方法是生成某种类型多少个对象,然后我们能够把他放到容 ...

  3. 聊聊并发-Java中的Copy-On-Write容器

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp78   聊聊并发-Java中的Copy-On-Write容器   Cop ...

  4. 由Java 15废弃偏向锁,谈谈Java Synchronized 的锁机制

    Java 15 废弃偏向锁 JDK 15已经在2020年9月15日发布,详情见 JDK 15 官方计划.其中有一项更新是废弃偏向锁,官方的详细说明在:JEP 374: Disable and Depr ...

  5. Java:常用的容器小记

    Java:常用的容器小记 对 Java 中的 常用容器,做一个微不足道的小小小小记 容器类概述 常见容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 M ...

  6. Java Servlet与Web容器之间的关系

    自从计算机软件开发进入网络时代,就开始涉及到通讯问题.在客户/服务器(也叫C/S应用)时期,每个软件都有自己的客户端和服务器端软件.并且客户端和服务器端之间的通讯协议差别也很大.后来随着互联网的发展, ...

  7. 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置

    经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...

  8. java并发程序——并发容器

    概述 java cocurrent包提供了很多并发容器,在提供并发控制的前提下,通过优化,提升性能.本文主要讨论常见的并发容器的实现机制和绝妙之处,但并不会对所有实现细节面面俱到. 为什么JUC需要提 ...

  9. Java EE中的容器和注入分析,历史与未来

    Java EE中的容器和注入分析,历史与未来 java中的容器 java中的注入 容器和注入的历史和展望 一.java中的容器 java EE中的注入,使我们定义的对象能够获取对资源和其他依赖项的引用 ...

随机推荐

  1. mysql两种常用备份工具

    一.mysqldump备份: 在开启GTID模式时,在master上执行的备份: --set-gtid-purged=OFF 在开启GTID模式时,要在slave上执行,想重新搭建一套slave环境. ...

  2. Linux基础学习-RPM

    目录 1. RPM简介 2. 常用软件安装工具 3. RPM命令参数 4. 使用范例 4.1 查看rpm包信息 4.2 查看rpm包内容 4.3 查看rpm包依赖 4.4 安装rpm包 4.5 卸载r ...

  3. python初体验 ——>>> 模拟体育竞技

    python初体验 ——>>> 模拟体育竞技 一.排球训练营 1. 简介: 模拟不同的两个队伍进行排球的模拟比赛. 2. 模拟原理: 通过输入各自的能力值(Ⅰ),模拟比赛的进行( P ...

  4. [AI开发]基于DeepStream的视频结构化解决方案

    视频结构化的定义 利用深度学习技术实时分析视频中有价值的内容,并输出结构化数据.相比数据库中每条结构化数据记录,视频.图片.音频等属于非结构化数据,计算机程序不能直接识别非结构化数据,因此需要先将这些 ...

  5. 75. Spring Boot 定制URL匹配规则【从零开始学Spring Boot】

    在之前有一篇文章说了,博客名称从原来的<从零开始学Spring Boot>更改为<Spring Boot常见异常汇总>,后来写了几篇文章之后发展,有些文章还是一些知识点,所以后 ...

  6. shell脚本简单密码加密

    #!/bin/sh #输入密码 echo "请输入原密码:" read resultFirst firstPWD=$resultFirst echo "请再次输入原密码: ...

  7. [luoguP2513] [HAOI2009]逆序对数列(DP)

    传送门 f[i][j]表示前i个数,逆序对数为j的答案 则DP方程为: f[1][0] = 1; for(i = 2; i <= n; i++) for(j = 0; j <= m; j+ ...

  8. linux 安装报错:pkg-config not found

    linux 安装报错:pkg-config not found 使用编译安装时,在执行./configure时报如下错误: ... ... checking for pkg-config... no ...

  9. vagrant的学习之Git学习

    vagrant的学习之Git学习 参考学习网址: http://www.runoob.com/git/git-install-setup.html. http://www.bootcss.com/p/ ...

  10. 显示倒计时的Button按钮

    package com.pingyijinren.helloworld.activity; import android.os.CountDownTimer; import android.suppo ...