使用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; } } } 这段代码(假设你试图删除包含某些单词的句子)使用迭代器并避免使用原始代码中的字符串连接和解析逻辑(用一个正则表达式代替它),这两者都应该更快. 但请记住,就像所有表现一样,你需要测试这些变化,看看它们能改善这种情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读