加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用Java中的另一个Arraylist循环遍历ArrayList

发布时间:2020-12-15 05:13:10 所属栏目:Java 来源:网络整理
导读:我有一个大型的句子列表和另一个单词列表. 我的程序遍历数组列表,如果句子包含来自另一个的任何单词,则从该数组列表中删除一个元素. 句子数组列表可能非常大,我编写了一个快速而脏的嵌套for循环.虽然这适用于没有多少句子的情况,但是在它们是的情况下,完成此
我有一个大型的句子列表和另一个单词列表.

我的程序遍历数组列表,如果句子包含来自另一个的任何单词,则从该数组列表中删除一个元素.

句子数组列表可能非常大,我编写了一个快速而脏的嵌套for循环.虽然这适用于没有多少句子的情况,但是在它们是的情况下,完成此操作所需的时间非常长.

for (int i = 0; i < SENTENCES.size(); i++) {

        for (int k = 0; k < WORDS.size(); k++) {

            if (SENTENCES.get(i).contains(" " + WORDS.get(k) + " ") == true) {

                //Do something
            }
        }
    }

有没有更有效的方法来执行此操作然后嵌套for循环?

解决方法

你的代码中存在一些效率低下的问题,但是在一天结束的时候,如果你必须搜索包含单词的句子,那么就无法摆脱循环.

也就是说,有几件事要尝试.

首先,使WORDS成为HashSet,contains方法将远远快于ArrayList,因为它正在进行哈希查找以获取值.

其次,切换逻辑有点像这样:

Iterator<String> sentenceIterator = SENTENCES.iterator();

sentenceLoop:
while (sentenceIterator.hasNext())
{
  String sentence = sentenceIterator.next();

  for (String word : sentence.replaceAll("p{P}"," ").toLowerCase().split("s+"))
  {
    if (WORDS.contains(word))
    {
      sentenceIterator.remove();
      continue sentenceLoop;
    }
  }      
}

这段代码(假设你试图删除包含某些单词的句子)使用迭代器并避免使用原始代码中的字符串连接和解析逻辑(用一个正则表达式代替它),这两者都应该更快.

但请记住,就像所有表现一样,你需要测试这些变化,看看它们能改善这种情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读