李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
填充容器--一种Generator解决方案
Leefs
2020-01-06 AM
1733℃
0条
# 填充容器--一种Generator解决方案 ### 前言 本小节讲述《Java编程思想》第17.2.1小节,填充容器--一种Generator解决方案 ### 概述 所有的Collection子类型都有一个接收另一个Collection对象的构造器,用所接收的Collection对象中的元素来填充新的容器。 **示例** ```java public class CollectionData
extends ArrayList
{ //构造器传入一个生成器, 在Collection中生成T类型元素 public CollectionData(Generator
gen,int quantity){ for(int i=0;i
CollectionData
list(Generator
gen, int quantity){ return new CollectionData
(gen,quantity); } } ``` 本类中使用Generator在容器中放置所需数量的对象,然后所产生的容器可以传递给任何Collection的构造器,这个构造器会把其中的数据复制到自身中。addAll()方法是所有Collection子类型的一部分,它也可以用来组装现有的Collection. 泛型便利方法可以减少在使用类时所必需的类型检查数量。 CollectionData是适配器设计模式的一个实例,它将Generator适配到Collection的构造器上。 **初始化LinkedHashSet示例** ```java class Goverment implements Generator
{ String[] foundation = ("string women lying in ponds"+"distributing swords is no basis for a system of"+"government").split(" "); private int index; @Override public String next() { return foundation[index++]; } } public class CollectionDataTest { public static void main(String[] args) { Set
set = new LinkedHashSet<>(new CollectionData
(new Goverment(),13)); set.addAll(CollectionData.list(new Goverment(),13)); System.out.println(set); } } ``` > 运行结果 ```java [string, women, lying, in, pondsdistributing, swords, is, no, basis, for, a, system, ofgovernment] ``` > 代码执行过程 1. 创建Goverment对象,对Goverment对象进行初始化操作 2. 为foundation字符串数组进行赋值 3. 创建CollectionData对象,执行CollectionData对象的有参构造方法 4. 执行构造函数中的for循环操作,在CollectionData逐个生成元素 5. 执行`set.addAll(CollectionData.list(new Goverment(),13));` + 创建Goverment对象,执行Goverment中的构造方法 + 为foundation字符串数组进行赋值 + 执行CollectionData类中的静态方法list + 创建CollectionData对象,执行CollectionData对象的有参构造方法(适配器设计模式) + 执行构造函数中的for循环操作,为LinkedHashSet逐个添加元素 + return进行返回 + 执行setaddAll进行全部添加到LinkedHashSet中 > 代码分析 **代码1** ```java Set
set = new LinkedHashSet<>(new CollectionData
(new Goverment(),13)); System.out.println(set); ``` 执行结果 ```java [string, women, lying, in, pondsdistributing, swords, is, no, basis, for, a, system, ofgovernment] ``` **代码2** ```java Set
set = new LinkedHashSet<>(); set.addAll(CollectionData.list(new Goverment(),13)); System.out.println(set); ``` 执行结果 ``` [string, women, lying, in, pondsdistributing, swords, is, no, basis, for, a, system, ofgovernment] ``` 上述两个代码是初始化LinkedHashSet实例的两种不同方式,一种是通过创建对象,另一种是通过适配器来创建对象实现初始化操作。 这些元素的顺序与它们的插入顺序相同,因为LinkedHashSet维护的是保持了插入顺序的链接列表。
标签:
Java
,
Java编程思想
,
容器深入研究
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/389.html
上一篇
Docker应用部署
下一篇
容器深入研究--Map生成器
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
锁
Redis
散列
Python
pytorch
算法
FastDFS
查找
MyBatisX
稀疏数组
RSA加解密
人工智能
Beego
Stream流
Java编程思想
随笔
高并发
DataX
Elasticsearch
Spark SQL
Flink
Azkaban
Shiro
Java阻塞队列
Map
Tomcat
SQL练习题
Spark Streaming
Git
FileBeat
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭