4.创建用来生成文档所需要的对象:String矩阵,和用来生成随机数的Random对象。
int counter=0;
String document[][]=new String[numLines][numWords];
Random random=new Random();
5.为字符串矩阵填上字符串。通过随机数取得数组words中的某一字符串,然后存入到字符串矩阵document对应的位置上,同时计算生成的字符串矩阵中将要查找的词出现的次数。这个值可以用来与后续程序运行查找任务时统计的次数相比较,检查两个值是否相同。
for (int i=0; i<numLines; i++){
for (int j=0; j<numWords; j++) {
int index=random.nextInt(words.length);
document[i][j]=words[index];
if (document[i][j].equals(word)){
counter++;
}
}
}
6.在控制台输出这个词出现的次数,并返回生成的矩阵document。
System.out.println("DocumentMock: The word appears "+
counter+" times in the document");
return document;
7.创建名为DocumentTask的类,并继承RecursiveTask类,RecursiveTask类的泛型参数为Integer类型。这个DocumentTask类将实现一个任务,用来计算所要查找的词在行中出现的次数。
public class DocumentTask extends RecursiveTask<Integer> {
8.声明一个名为document的私有String矩阵,以及两个名为start和end的私有int属性,并声明一个名为word的私有String属性。
private String document[][];
private int start, end;
private String word;
9.实现类的构造器,用来初始化类的所有属性。
public DocumentTask (String document[][], int start, int end,
String word){
this.document=document;
this.start=start;
this.end=end;
this.word=word;
}
10.实现compute()方法。如果end和start的差异小于10,则调用processLines()方法,来计算这两个位置之间要查找的词出现的次数。
@Override
protected Integer compute() {
int result;
if (end-start<10){
result=processLines(document, start, end, word);
11.否则,拆分这些行成为两个对象,并创建两个新的DocumentTask对象来处理这两个对象,然后调用invokeAll()方法程池里执行它们。
} else {
int mid=(start+end)/2;
DocumentTask task1=new DocumentTask(document,start,mid,word);
DocumentTask task2=new DocumentTask(document,mid,end,word);
invokeAll(task1,task2);
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40557-7.html
用船撞
只要去关注就可以了