读书人

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

发布时间: 2013-08-06 16:47:25 作者: rapoo

对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() + "个");
}

读书人网 >J2SE开发

热点推荐