AppSensei
AppSensei

Reputation: 8400

Remove duplicate elements in an ArrayList without using HashSet

My logic is messed up. I am just trying to work out a way to remove duplicates in an ArrayList without using a HashSet.

public static void main(String[] args) {
    ArrayList<String> wordDulicate = new ArrayList<String>();
    wordDulicate.add("Tom");
    wordDulicate.add("Jones");
    wordDulicate.add("Sam");
    wordDulicate.add("Jamie");
    wordDulicate.add("Robie");
    wordDulicate.add("Helen");
    wordDulicate.add("Tom");
    wordDulicate.add("Troy");
    wordDulicate.add("Mika");
    wordDulicate.add("Tom");

    for (String dupWord : wordDulicate) {
        if (wordDulicate.equals(dupWord))
            System.out.println(wordDulicate.get(dupWord));
    }
}

Upvotes: 6

Views: 47385

Answers (9)

Tirth Baraiya
Tirth Baraiya

Reputation: 1

public static void main(String[]args){
       ArrayList<String> al = new ArrayList<String>();
       al.add("Tom");
       al.add("jerry");
       al.add("mike");
       al.add("jerry");
      ArrayList<String> names = new ArrayList<String>();
       for(String dupli : al){
           if(!names.contains(dupli)){
               names.add(dupli);
           }
       }
       System.out.println(names);
    }

Upvotes: -1

Manash Ranjan Dakua
Manash Ranjan Dakua

Reputation: 311

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

Scanner sc = new Scanner(System.in);
for(int i=0;true;i++){
    System.out.println("Enter your Element:");
     String s1= sc.nextLine();
     if(s1.equals("Exit")){
         break;
     }
     int x1= Integer.parseInt(s1);
     al.add(x1);

     for(int j=0;j<al.size();j++){
         for(int k=j+1;k<al.size();k++){

             int temp;
             if(al.get(j).intValue()>al.get(k).intValue()){
                 temp =al.get(j).intValue();
                 al.set(j, al.get(k).intValue());
                 al.set(k, temp);

             }//if
         }//for
     }//for
}//for
System.out.println(al);

Upvotes: 0

Saurabh
Saurabh

Reputation: 11

package arraylist;

import java.util.ArrayList;
import java.util.Iterator;

class Student{
    String name;
    String dob;
    public Student(String name, String dob) {
        super();
        this.name = name;
        this.dob = dob;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDob() {
        return dob;
    }
    public void setDob(String dob) {
        this.dob = dob;
    }

    public String toString() {
        return name+"\t"+dob;
    }
}

public class RemoveDuplicate {

    public static void main(String[] args) {

        ArrayList<Student> list=new ArrayList<Student>();
        list.add(new Student("prakash", "89"));
        list.add(new Student("prakash", "89"));
        list.add(new Student("saurabh", "79"));
        list.add(new Student("saurabh", "79"));

        Iterator<Student> it=list.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }

        int size=list.size();
        for(int i=0;i<size-1;i++){
            for(int j=i+1;j<size-1;j++){
                if(list.get(i).getName().equals(list.get(j).getName())){
                    list.remove(j);
                }
            }
        }
            System.out.println(list);
    }
}

Upvotes: 1

Salil Kumar
Salil Kumar

Reputation: 41

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class ArrayListDuplicateRemove {

    public static void main(String[] args) {


       List<String> lst = new LinkedList<String>();
        lst.add("ABC");
        lst.add("ABC");
        lst.add("ABCD");
        lst.add("ABCD");
        lst.add("ABCE");

        System.out.println("Duplicates List "+lst);

        Object[] st = lst.toArray();
          for (Object s : st) {
            if (lst.indexOf(s) != lst.lastIndexOf(s)) {
                lst.remove(lst.lastIndexOf(s));
             }
          }

        System.out.println("Distinct List "+lst);

    }

}

Upvotes: 2

theRoot
theRoot

Reputation: 569

Seems little late to the party, but with single arraylist,

Here's the code without hashset...

strings = new ArrayList<>();
    strings.add("a1");
    strings.add("a2");
    strings.add("ss");
    strings.add("asd");
    strings.add("asd");
    strings.add("a1");
    strings.add("ss");
    strings.add("ss");
    System.out.println(Collections.frequency(strings, "ss"));
    for(int i = 0; i< strings.size();i++){
        int frequency = Collections.frequency(strings, strings.get(i));
        if(frequency>1){
            String string = strings.get(i);
            for(int j = 1 ; j < frequency ; j++)
                strings.remove(string);
        }
    }
    System.out.println(Collections.frequency(strings, "ss"));
    System.out.println(strings);

Upvotes: 3

Nash
Nash

Reputation: 131

 ArrayList l1 = new ArrayList();
ArrayList l2 = new ArrayList();

Iterator iterator = l1.iterator();

    while (iterator.hasNext())
    {
        YourClass o = (YourClass) iterador.next();
        if(!l2.contains(o)) l2.add(o);
    }

l1 is the original list, and l2 is the list whithout repeated items (Make sure YourClass has the equals method acording to what you want to stand for equality)

Upvotes: 0

kosa
kosa

Reputation: 66637

This methodology requires having another list:

       ArrayList<String> wordDulicate = new ArrayList<String>();

        wordDulicate.add("Tom");
        wordDulicate.add("Jones");
        wordDulicate.add("Sam");
        wordDulicate.add("Jamie");
        wordDulicate.add("Robie");
        wordDulicate.add("Helen");
        wordDulicate.add("Tom");
        wordDulicate.add("Troy");
        wordDulicate.add("Mika");
        wordDulicate.add("Tom");

        ArrayList<String> nonDupList = new ArrayList<String>();

        Iterator<String> dupIter = wordDulicate.iterator();
        while(dupIter.hasNext())
        {
        String dupWord = dupIter.next();
        if(nonDupList.contains(dupWord))
        {
            dupIter.remove();
        }else
        {
            nonDupList.add(dupWord);
        }
        }
      System.out.println(nonDupList);

Output:

[Tom, Jones, Sam, Jamie, Robie, Helen, Troy, Mika]

Upvotes: 6

Rohit Jain
Rohit Jain

Reputation: 213233

You can create another list, and add items to it, skipping the duplicates: -

ArrayList<String> wordDulicate = new ArrayList<String>();
ArrayList<String> tempList= new ArrayList<String>();

wordDulicate.add("Tom");
wordDulicate.add("Jones");
wordDulicate.add("Sam");


for (String dupWord : wordDulicate) {
    if (!tempList.contains(dupWord)) {
        tempList.add(dupWord);
    }
}

Upvotes: 9

dan
dan

Reputation: 13262

You should sort the list and remove the element that is equal to the previous one.

Upvotes: 6

Related Questions