从头认识java-15.1 填充容器(3)-填充Map
这一章节我们来讨论一下填充容器的还有一个方面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的更多相关文章
- 从头认识java-15.1 填充容器(2)-利用Collection的addAll方式
接着上一章节,我们继续介绍填充容器. 这一章节我们结束还有一种填充容器的方式:addAll 样例: package com.ray.ch15; import java.util.ArrayList; ...
- 从头认识java-15.1 填充容器(1)-利用Collection构造器的方式
这一章节我们来介绍一下填充容器. 就像数组一样,Arrays.fill是填充方法,在容器里面也有. 1.Collections.nCopies 这种方法是生成某种类型多少个对象,然后我们能够把他放到容 ...
- 聊聊并发-Java中的Copy-On-Write容器
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp78 聊聊并发-Java中的Copy-On-Write容器 Cop ...
- 由Java 15废弃偏向锁,谈谈Java Synchronized 的锁机制
Java 15 废弃偏向锁 JDK 15已经在2020年9月15日发布,详情见 JDK 15 官方计划.其中有一项更新是废弃偏向锁,官方的详细说明在:JEP 374: Disable and Depr ...
- Java:常用的容器小记
Java:常用的容器小记 对 Java 中的 常用容器,做一个微不足道的小小小小记 容器类概述 常见容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 M ...
- Java Servlet与Web容器之间的关系
自从计算机软件开发进入网络时代,就开始涉及到通讯问题.在客户/服务器(也叫C/S应用)时期,每个软件都有自己的客户端和服务器端软件.并且客户端和服务器端之间的通讯协议差别也很大.后来随着互联网的发展, ...
- 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置
经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...
- java并发程序——并发容器
概述 java cocurrent包提供了很多并发容器,在提供并发控制的前提下,通过优化,提升性能.本文主要讨论常见的并发容器的实现机制和绝妙之处,但并不会对所有实现细节面面俱到. 为什么JUC需要提 ...
- Java EE中的容器和注入分析,历史与未来
Java EE中的容器和注入分析,历史与未来 java中的容器 java中的注入 容器和注入的历史和展望 一.java中的容器 java EE中的注入,使我们定义的对象能够获取对资源和其他依赖项的引用 ...
随机推荐
- 【JavaEE-面试总结】(未完,待续···)
目录: 一.Java基础 二.JavaEE基础 三.JavaEE进阶 四.数据库 五.数据结构&算法 六.高级(服务器) 一.Java基础 1.1 面向对象(封装.继承.多态) 访问权限修饰符 ...
- js正则替换十六进制
var re=/\x62/;//没有0,也没有分号。alert(re.test("blue")); //output "true" 需要使用< 如需显示 ...
- php 正则匹配包含字母、数字以及下划线,且至少包含2种
新系统注册功能需对用户名和密码做以下要求:包含字母.数字以及下划线,且至少包含2种: 在网上没有搜到符合要求的代码,于是自己对他人代码做了一点修改,经测试满足要求.代码如下: if (!preg_ma ...
- Cow Exhibition (01背包)
"Fat and docile, big and dumb, they look so stupid, they aren't much fun..." - Cows with G ...
- SPOJ FAVDICE 数学期望
题目大意: 一个有n面的色子抛掷多少次能使所有面都能被抛到过,求期望值 总面数为n,当已经抛到过 i 个不同面时,我们抛出下一个不同面的概率为 (n-i)/n,那么抛的次数为 n/(n-i) 将所有抛 ...
- 【HDOJ6312】Game(博弈)
题意: 有一个1到n的序列,两个人轮流取数,取走一个数同时会取走它所有的因子,不能取者为输,两个人都按最优策略取数,问先手是否必胜 思路: #include<cstdio> #includ ...
- 【BZOJ1237】配对(贪心,DP)
题意:有n个a[i]和b[i],调整顺序使abs(a[i]-b[i])之和最小,但a[i]<>b[i].保证所有 Ai各不相同,Bi也各不相同. 30%的数据满足:n <= 104 ...
- Python基础教程笔记——第2章:列表和元组
python shell 里重复上一次的命令:Alt+p 2.3 列表:Python的苦力 (1)list函数 (2)列表赋值,不蹦蹦为一个元素不存在的位置赋值 (3)删除元素,del name[1] ...
- 免费第三方API平台整合
各大平台免费接口,非常适用 http://developer.51cto.com/art/201412/458778.htm 绝对干货:供个人开发者赚钱免费使用的一些好的API接口http://www ...
- ACM-ICPC 2018 徐州赛区网络预赛 D 杜教筛 前缀和
链接 https://nanti.jisuanke.com/t/31456 参考题解 https://blog.csdn.net/ftx456789/article/details/82590044 ...