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

Java ArrayList删除没有集合的dupes

发布时间:2020-12-15 08:48:17 所属栏目:Java 来源:网络整理
导读:我在从ArrayList中删除重复项时遇到问题.这是为了大学的任务.这是我已经拥有的代码: public int numberOfDiffWords() { ArrayListString list = new ArrayList(); for(int i=0; iwords.size()-1; i++) { for(int j=i+1; jwords.size(); j++) { if(words.get
我在从ArrayList中删除重复项时遇到问题.这是为了大学的任务.这是我已经拥有的代码:

public int numberOfDiffWords() {
    ArrayList<String> list = new ArrayList<>();
    for(int i=0; i<words.size()-1; i++) {
        for(int j=i+1; j<words.size(); j++) {
            if(words.get(i).equals(words.get(j))) {
                // do nothing
            }
            else  {
                list.add(words.get(i));
            }
        }
    }
    return list.size();
}

问题出在numberOfDiffWords()方法中.填充列表方法工作正常,因为我的讲师给了我一个样本字符串(包含4465个单词)来分析 – 打印words.size()给出了正确的结果.

我想返回新ArrayList的大小,删除所有重复项.

words是一个ArrayList类属性.

更新:我应该提到我只允许在分配的这一部分使用基于动态索引的存储,这意味着没有基于散列的存储.

解决方法

由于这是一项任务,我不打算编写代码.但是,我建议采用不同的方法.

>按照您的方式迭代数组
>使用subList()方法从一开始构造一个数组视图,但不包括当前元素
>使用contains()来测试当前元素是否在上一步构造的子列表中
>只计算找到的前缀中未包含的元素数量

我推荐的方法应该会产生更简单易懂的代码.请注意,所有这些都是O(n2)解决方案(就像你的那样,如果你做得对的话).

如果分配允许修改数组,则另一种方法是对数组进行排序.然后相等的元素将相邻,并且很容易计算有多少是唯一的.这是一种O(n log(n))方法. (您也可以只创建一个数组副本,这不会改变渐近的复杂性,但会降低解决方案的速度.)

如果不使用某种散列函数(HashSet或HashMap),你就不会比这更好.

(编辑:李大同)

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

    推荐文章
      热点阅读