java通用组合算法如何实现
Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心,Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。以下是小编为大家搜索整理的java通用组合算法如何实现,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!
存在一个类似{31311133,33113330}这样的集合,经过8取5组合,其他位置用非字母数字字符替代,比如使用*号,得到类似{3***1133,***13330,... ...}这样的集合;
还要求对于{3***1133,***13330}这样的集合,再次经过5取3组合,其他位置用非字母数字字符替代,比如使用*号,得到类似{*****133,*****330,3***1*3*,... ...}这样的集合。
对于这样的要求,实现的思路如下:
首先,主要思想是基于信息编码原理,通过扫描字符串,将10组合变为01组合。
其次,对于每个数字字符串,设置一个单线程,在单线程类中设置一个List用来存放待处理数字字符串(可能含有*号,或者不含有)中每个数字的(而非*号)索引位置值;
再次,设置BitSet来标志每个位置是否被*号替换得到新的组合字符串。
最后,在扫描原始待处理数字字符串的`过程中,根据设置的字符列表List中索引,来操作BitSet,对于每一个BitSet得到一个新的组合。
使用Java语言实现如下:
package drn;
import yList;
import et;
import ection;
import ections;
import Set;
import ator;
import ;
/**
* 通用组合拆分类(基于单线程)
*
* 可以完成两种功能:
*
* 第一,可以将完全数字串拆分成为含有*号的字符串。
* 例如:输入集合{31311133,33113330},Splitter类会遍历该集合,对每个字符串,创建一个SplitterThread
* 线程来处理,如果是2取1组合,即starCount=8-2=6,经过线程处理得到类似******33,*****1*3等结果
*
* 第二,根据从带有*号的字符串经过拆分过滤后得到的字符串集合,对其中每一个字符串进行组合
* 例如:输入集合5取1组合字符串集合{3***1133,***113330}
*
* CommonSplitter类会遍历该集合,对每个带有*号的字符串,创建一个SplitterThread
* 线程来处理,如果是2串1组合,即starCount=8-3-2=3,经过线程处理得到类似******33,*****1*3等结果
*
* @author 时延军
*
*/
public class CommonSplitter {
private int starCount;
private boolean duplicate;
private Collection filteredContainer;
public Collection getFilteredContainer() {
return filteredContainer;
}
/**
* 构造一个Spilitter实例
*
* @param container 输入的待处理字符串集合
* @param starCount 如果对于长度为N的数字字符串,进行M组合(即N取M),则starCount=N-M
* @param duplicate 是否去重
*/
public CommonSplitter(Collection container, int starCount, boolean duplicate) {
icate = duplicate;
Count = starCount;
if(icate) { // 根据指定是否去重的选择,选择创建容器
filteredContainer = hronizedSet(new HashSet());
}
else {
filteredContainer = hronizedList(new ArrayList());
}
Iterator it = ator();
while(ext()) {
new Thread(new SplitterThread(()()))t();
}
try {
p(50);
} catch (InterruptedException e) {
tStackTrace();
}
}
-
java语言运算符的使用
Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。下面小编整理了java语言运算符的使用,希望对大家有帮助!赋值运算符的使用=、+=、-=、*=、/=、%=算术运算符的使用算术运算就是咱们生活中常见的加、...
-
在Java里处理文件的技巧
导读:看到太多的凌乱的,不安全的处理文件的代码了。可以说每个项目都会有人喜欢写自己的一些FileUitl。下面是小编为大家整理的在Java里处理文件的技巧,欢迎参考~实用的工具类,Path,Paths,Files,FileSystem有一些很灵活的处理方法://得到一个Path对象Pathpath=("/test/...
-
Java程序设计示例教程
本文以实例形式详细讲述了Java的反射机制,是Java程序设计中重要的技巧。分享给大家供大家参考。具体分析如下:首先,Reflection是Java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性。例如,使用它能获得Java类...
-
计算机二级Java备考习题及答案
练习可以帮助我们加深对知识的记忆和理解,下面是本站小编整理的2017计算机二级Java备考练习题及答案,欢迎学习!备考练习题一1、下列叙述中,错误的是______。A、Applet的默认布局管理器是FlowLayoutB、JApplet中增加构件是加到JApplet的内容面板上,不是直接加到JApp...