有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java数组列表。移除不正常工作的部件

我有一个已排序的整数数组,想要删除重复项,我编写了以下代码

package practice;
import java.util.*;

public class pb1 {

public static void removeDup(int[] theArray){       

    ArrayList<Integer> hold=new ArrayList<Integer>();


    for(int i=0;i<theArray.length-1;i++){


            hold.add(theArray[i]);

            //System.out.println(hold);

}
    for(int i=0;i<hold.size()-1;i++){
        if(hold.get(i)==hold.get(i+1)){
            hold.remove(i);
        }

    }
    System.out.println(hold);
}


public static void main(String[]args){
    int[] now={1,1,2,2,3,4,4,4,5,5,5,5};
    removeDup(now);



}

}

正在尝试使用arraylist删除重复项。移除方法,但我仍然可以在打印的arraylist中看到重复项。我不知道为什么,有人能帮我吗?谢谢


共 (4) 个答案

  1. # 1 楼答案

    为什么要手动删除重复项?可以将列表复制到集合以删除重复项,然后再次从集合复制到列表。像这样的

    ArrayList aList = new ArrayList();
    LinkedHashSet link = new LinkedHashSet();
    link.addAll(aList);
    aList.clear();
    aList.addAll(link);
    
  2. # 2 楼答案

    向后迭代。向前删除项目将删除当前元素,然后增加计数器/索引,从而跳过可能的重复项。将循环替换为:

    for(int i = hold.size() - 1; i >= 1;i--){
        if(hold.get(i)==hold.get(i - 1)){
            hold.remove(i);
        }
    }
    

    编辑:您的代码在连续三个4点失败 当索引位于前4位时:

    {1,1,2,2,3,>;4,4,4,5,5,5}

    它检查下一个元素。它删除了当前元素,因为它看到前面有一个4,但这就是bug出现的地方

    {1,1,2,2,3,4,>4,5,5,5,5}
    

    删除前4个后,后续数组元素向后移动,然后增加计数器,从而跳过其他4个。因此,重复的

  3. # 3 楼答案

    另一种解决方案。这充分利用了Set不允许重复条目的事实,并大大简化了代码

    public class pb1 
    {
    
    public static void removeDup(int[] theArray)
    {       
        Set<Integer> hold=new TreeSet<Integer>();
        for(int i=0;i<theArray.length-1;i++)
        {
            hold.add(theArray[i]);
        }
        System.out.println(hold);
    }
    
    
    public static void main(String[]args)
        {
         int[] now={1,1,2,2,3,4,4,4,5,5,5,5};
         removeDup(now);
        }
    }
    

    输出:

    [1, 2, 3, 4, 5]
    
  4. # 4 楼答案

    试试这个:

    for (int i = 0; i < theArray.length - 1; i++) {
    
               if (!hold.contains(theArray[i]))
    
                    hold.add(theArray[i]);
    
    }
    
    System.out.println(hold);