首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

对JAVA不熟悉,帮忙优化一下下头的程序

2013-08-06 
对JAVA不熟悉,帮忙优化一下下面的程序本帖最后由 pooq 于 2013-08-02 00:41:31 编辑public static void si

对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);



我没有测,大概这思路
[解决办法]

 public static void simplySentenceOfAllDocument(ArrayList<String> SentenceOfAllDocument,
        ArrayList<String> ConceptFromExcel)
    {
        ArrayList<Integer> IndexOfSentenceOfAllDocument = new ArrayList<Integer>();
        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
                {
                    //句子里面有这个词,则查找这个句子的索引是否在数组中,如果存在,则删除这个索引
                    Integer temp = m;//转换为Integer判断是否包含
                    while(IndexOfSentenceOfAllDocument.contains(temp))
                    {
                        IndexOfSentenceOfAllDocument.remove(temp);


                    }
                    /*for (int j = 0; j < IndexOfSentenceOfAllDocument.size(); j++)
                    {
                        if (m == IndexOfSentenceOfAllDocument.get(j))
                        {
                            IndexOfSentenceOfAllDocument.remove(j);
                        }
                    }*/
                }
            }
        }
        int index;
        ArrayList<String> delList = new ArrayList<String>();
        for (int n = 0; n < IndexOfSentenceOfAllDocument.size(); n++)
        {
            index = IndexOfSentenceOfAllDocument.get(n);
            delList.add(SentenceOfAllDocument.get(index));
//            SentenceOfAllDocument.remove(IndexOfSentenceOfAllDocument.get(n));//不能直接remove Integer对象,而且直接删除,索引也会乱了
        }
        SentenceOfAllDocument.removeAll(delList);//这样一次性删除
        System.out.println("countofWordInSentence:精简后句子共有 " + SentenceOfAllDocument.size() + "个");
    }


[解决办法]
对于多次用到函数取值的,你可以将这个赋给一个变量,用到的地方直接用变量,省得每次都去获取,如ConceptFromExcel.size()就可以赋值给一个变量
------解决方案--------------------



    public static void simplySentenceOfAllDocument(List<String> SentenceOfAllDocument, List<String> ConceptFromExcel) {
        System.out.println("countofWordInSentence:初始句子共有 " + SentenceOfAllDocument.size() + "个");
        int sizei = SentenceOfAllDocument.size();
        int sizej = ConceptFromExcel.size();
        for (int i = 0; i < sizei; i++) {
            boolean flag = false;
            for (int j = 0; j < sizej; j++) {
                if (SentenceOfAllDocument.get(i).indexOf(ConceptFromExcel.get(j)) != -1) {
                    flag = true;
                    break;
                }
            }
            if (!flag) {
                SentenceOfAllDocument.remove(i);
                i--;
                sizei--;
            }
        }
        System.out.println("countofWordInSentence:精简后句子共有 " + SentenceOfAllDocument.size() + "个");
    }

热点排行