日期:2014-05-20  浏览次数:20671 次

对JAVA不熟悉,帮忙优化一下下面的程序
本帖最后由 pooq 于 2013-08-02 00:41:31 编辑
public static void simplySentenceOfAllDocument(ArrayList<String> SentenceOfAllDocument,ArrayList<String> ConceptFromExcel){
ArrayList<Integer> IndexOfSentenceOfAllDocument=new ArrayList();
System.out.println("countofWordInSentence:初始句子共有 "+SentenceOfAllDocument.size()+"个");
for(int i=0;i<ConceptFromExcel.size();i++){
System.out.println(i+"/"+ConceptFromExcel.size());
for(int m=0;m<SentenceOfAllDocument.size();m++){
if(!SentenceOfAllDocument.get(m).contains(ConceptFromExcel.get(i))){
//如果句子里面不存在这个词,则将句子的索引放入数组
IndexOfSentenceOfAllDocument.add(m);
}else{
//句子里面有这个词,则查找这个句子的索引是否在数组中,如果存在,则删除这个索引
for(int j=0;j<IndexOfSentenceOfAllDocument.size();j++){
if(m==IndexOfSentenceOfAllDocument.get(j)){
IndexOfSentenceOfAllDocument.remove(j);
}
}
}
}
}
for(int n=0;n<IndexOfSentenceOfAllDocument.size();n++){
SentenceOfAllDocument.remove(IndexOfSentenceOfAllDocument.get(n));
}
System.out.println("countofWordInSentence:精简后句子共有 "+SentenceOfAllDocument.size()+"个");
}

程序的作用:判断SentenceOfAllDocument的每个字符串,是否至少包含一个ConceptFromExcel中的字符串,如果一个都不包含,则将相关字符串从SentenceOfAllDocument中删除。

我的思路是:IndexOfSentenceOfAllDocument数组用于存储不满足条件的SentenceOfAllDocument的元素索引;在此基础上,假设将一个ConceptFromExcel中的SC字符串放到SentenceOfAllDocument中的每个字符串SD[i]中去检验,如果SD[i]中不包含SC,则将这个SentenceOfAllDocument中字符串的下标i保存到IndexOfSentenceOfAllDocument中去,如果存在,则在IndexOfSentenceOfAllDocument数组中查找i,如果有,则删除;最后依据IndexOfSentenceOfAllDocument数组的内容,删除SentenceOfAllDocument中的元素。

编程不熟练,目前运行效率很低,另外前后数组长度未发生变化,希望能检查并优化一下!

------解决方案--------------------
List对象貌似用Iterator要比你的for要快好多的
------解决方案--------------------

for(int i=SentenceOfAllDocument.size-1;i>=0;i--){
int count=0;
for(String str:ConceptFromExcel){
if(!SentenceOfAllDocument.getIndex(i).equals(str)){
count++;
}else{
break;
}
}
if(count==ConceptFromExcel.size()){
SentenceOfAllDocument.remove(SentenceOfAllDocument.getIndex(i));}
)
}
System.out.println(SentenceOfAllDocument);