Простая программа для удаления дубликатов элементов в Java с помощью списка

java

750 просмотра

5 ответа

Я новичок, я пытался найти дубликаты элементов в данном списке, но по какой-то причине я получаю элемент 3 напечатанным дважды. Может кто-нибудь мне помочь?

ВЫХОД:

1 1 2 2 3 3 3 3 3 3 3 4 4 4 5 5 6 6

Двойной элемент (ы)

1 2 3 3 3 3 4 5 6

3 4

Удалены повторяющиеся элементы

1 2 3 3 4 5 6

public class Duplicate {
    public static void main(String[] args) {        
        int[] array={1,2,2,3,3,4,5,5,3,4,3,4,6,6,1,3,3,3};  
        Arrays.sort(array);             
        List<Integer> list=new ArrayList<Integer>();
        for(int x:array)
            list.add(x);
        for(int i=0;i<list.size();i++)
            System.out.print(list.get(i)+" ");
        System.out.println("\nDuplicate element(s)");
        for(int i=0;i<list.size();i++){
            for(int j=i+1;j<list.size();j++){
                if((list.get(i)==list.get(j))){
                    System.out.print(list.get(j)+" ");
                    list.remove(j);                     
                }               
            }
        }
        System.out.println();
        for(int i=0;i<list.size();i++){
            for(int j=i+1;j<list.size();j++){
                if((list.get(i)==list.get(j))){
                    System.out.print(list.get(j)+" ");
                    list.remove(j);     
                }
            }
        }       
        System.out.println("\nDuplicate element(s) removed");       
            for(int i=0;i<list.size();i++)
            System.out.print(list.get(i)+" ");
    }
}
Автор: suze Источник Размещён: 08.11.2019 11:10

Ответы (5)


0 плюса

Решение

Попробуйте с этим:

public static void main(String[] args) {

    int[] array = {1, 2, 2, 3, 3, 4, 5, 5, 3, 4, 3, 4, 6, 6, 1, 3, 3, 3};
    Arrays.sort(array);
    List<Integer> list = new ArrayList<>();
    for (int x : array) {
        list.add(x);
    }
    for (int i = 0; i < list.size(); i++) {
        System.out.print(list.get(i) + " ");
    }
    System.out.println();
    System.out.println("\nDuplicate element(s)");
    Integer last = null;
    Iterator<Integer> it = list.iterator();
    while (it.hasNext()){
        Integer n = it.next();
        if (n.equals(last)){
            System.out.print(n + " ");
            it.remove();
        }
        last = n;
    }
    System.out.println();

    System.out.println("\nDuplicate element(s) removed");

    for (int i = 0; i < list.size(); i++) {
        System.out.print(list.get(i) + " ");
    }
    System.out.println();
}

РЕДАКТИРОВАТЬ:

    System.out.println("\nDuplicate element(s)");
    for (int i = 0; i < list.size(); i++) {
        for (; (i+1) < list.size() && (list.get(i).equals(list.get(i+1)));) {
            System.out.print(list.get(i+1) + " ");
            list.remove(i+1);
        }
    }
    System.out.println();
Автор: David Pérez Cabrera Размещён: 20.08.2016 10:31

1 плюс

Вы можете использовать коллекции, но дело в том, что вам нужно будет обернуть примитивы с помощью класса Integer ... кстати, с помощью jdk 8 будет проще

   public static void main(String[] args) {
    Integer[] array = { 6, 1, 2, 2, 3, 3, 4, 5, 5, 3, 4, 3, 4, 6, 6, 1, 3, 3, 3 };
    Set<Integer> setJder = new LinkedHashSet<>(Arrays.asList(array));
    System.out.println(setJder );


    //  since JDK 8
    Set<Integer> mySet = Stream.of(6, 1, 2, 2, 3, 3, 4, 5, 5, 3, 4, 3, 4, 6, 6, 1, 3, 3, 3)
        .collect(Collectors.toCollection(HashSet::new));
    System.out.println(mySet);
    }
Автор: ΦXocę 웃 Пepeúpa ツ Размещён: 20.08.2016 10:40

0 плюса

используя набор, вы можете сделать это.

Integer[] arr = {1,2,2,3,3,4,5,5,3,4,3,4,6,6,1,3,3,3};
Set<Integer> mySet = new HashSet<Integer>();
    Collections.addAll(mySet, arr);
    System.out.println(mySet); 
Автор: Durgpal Singh Размещён: 20.08.2016 10:29

0 плюса

Если вам не нужны дубликаты в коллекции, вам следует подумать о том, почему вы используете коллекцию, которая допускает дублирование. Самый простой способ удалить повторяющиеся элементы - это добавить содержимое в Set (что не допустит дублирования), а затем добавить Set обратно в ArrayList:

ArrayList<Integer> al = new ArrayList<Integer>(Arrays.asList(array));
Set<Integer> hs = new HashSet<Integer>();
hs.addAll(al);
al.clear();
al.addAll(hs);

Но это разрушает порядок элементов в ArrayList.

Автор: Sumit Badaya Размещён: 20.08.2016 10:34

0 плюса

Еще один способ сделать это - использовать логику подсчета сортировки. Или в качестве состояния предыдущих комментариев, используя Hash Set или Tree set, в зависимости от того, нужно ли вам их упорядочивать. Но если вы используете набор, не забудьте проверить, если .hashCode () и .equals () работают правильно

Автор: Kostadin Kostadinov Размещён: 20.08.2016 11:48
Вопросы из категории :
32x32