Reputation: 8400
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
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
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
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
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
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
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
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
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
Reputation: 13262
You should sort the list and remove the element that is equal to the previous one.
Upvotes: 6